version 1.5, 2025/03/24 02:01:41
|
version 1.14, 2025/05/14 12:22:04
|
Line 24
|
Line 24
|
* along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
* along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
* |
* |
* $Log$ |
* $Log$ |
|
* Revision 1.14 2025/05/14 12:22:04 snw |
|
* Further work on shared memory |
|
* |
|
* Revision 1.13 2025/04/19 21:52:20 snw |
|
* Remove extraneous symbol table debugging message |
|
* |
|
* Revision 1.12 2025/04/14 19:56:27 snw |
|
* Working towards FreeBSD fix |
|
* |
|
* Revision 1.11 2025/04/13 04:22:43 snw |
|
* Fix snprintf calls |
|
* |
|
* Revision 1.10 2025/04/10 01:24:39 snw |
|
* Remove C++ style comments |
|
* |
|
* Revision 1.9 2025/04/09 19:52:02 snw |
|
* Eliminate as many warnings as possible while building with -Wall |
|
* |
|
* Revision 1.8 2025/04/04 12:46:13 snw |
|
* Patch Solaris 8 crash and bump version to 0.63.1-rc1 |
|
* |
|
* Revision 1.7 2025/03/26 15:17:12 snw |
|
* Fall back to global-backed SSVNs when memory-backed globals fail in attempt to fix Tru64 |
|
* |
|
* Revision 1.6 2025/03/24 04:13:11 snw |
|
* Replace action macro dat with fra_dat to avoid symbol conflict on OS/2 |
|
* |
* Revision 1.5 2025/03/24 02:01:41 snw |
* Revision 1.5 2025/03/24 02:01:41 snw |
* Work around some OS/2 incompatibilities in symbol table code |
* Work around some OS/2 incompatibilities in symbol table code |
* |
* |
Line 47
|
Line 74
|
#include "merr.h" |
#include "merr.h" |
#include "consttbl.h" |
#include "consttbl.h" |
#include "shmmgr.h" |
#include "shmmgr.h" |
|
#include "log.h" |
|
|
/* Turn this on to get tons of lovely debugging messages about |
/* Turn this on to get tons of lovely debugging messages about |
symbol-table calls */ |
symbol-table calls */ |
/* #define DEBUG_SYM */ |
/* #define DEBUG_SYM */ |
|
|
|
short st_use_shm = FALSE; |
short restoring_consts = FALSE; |
short restoring_consts = FALSE; |
int semid_symtab; |
int semid_symtab; |
|
|
Line 111 void symtab_init (void)
|
Line 140 void symtab_init (void)
|
shm_config->hdr->PSIZE = DEFPSIZE; |
shm_config->hdr->PSIZE = DEFPSIZE; |
shm_config->hdr->argptr = mbpartition; |
shm_config->hdr->argptr = mbpartition; |
|
|
|
|
fprintf (stderr, "symtab_init: initializing memory-backed globals\r\n"); |
fprintf (stderr, "symtab_init: initializing memory-backed globals\r\n"); |
|
|
semid_symtab = semget (symtab_sk, 1, 0666 | IPC_CREAT); |
semid_symtab = semget (symtab_sk, 1, 0666 | IPC_CREAT); |
Line 122 void symtab_init (void)
|
Line 152 void symtab_init (void)
|
fprintf (stderr, "symtab_init: symbol table semaphore created with semid %d\r\n", semid_symtab); |
fprintf (stderr, "symtab_init: symbol table semaphore created with semid %d\r\n", semid_symtab); |
} |
} |
|
|
|
#if defined(__sun__) |
|
fprintf (stderr, "symtab_init: falling back to global-backed structured system variables\r\n"); |
|
shm_config->hdr->use_mb_globals = FALSE; |
|
return; |
|
#endif |
|
|
|
|
arg.val = 1; |
arg.val = 1; |
if (semctl (semid_symtab, 0, SETVAL, arg) == -1) { |
if (semctl (semid_symtab, 0, SETVAL, arg) == -1) { |
fprintf (stderr, "symtab_init: failed to initialize symbol table semaphore\r\n"); |
fprintf (stderr, "symtab_init: failed to initialize symbol table semaphore\r\n"); |
Line 134 void symtab_init (void)
|
Line 171 void symtab_init (void)
|
fprintf (stderr, "symtab_init: allocating partition for memory-backed globals\r\n"); |
fprintf (stderr, "symtab_init: allocating partition for memory-backed globals\r\n"); |
|
|
mbpartition = (char *) shm_alloc ((size_t) PSIZE + 2); |
mbpartition = (char *) shm_alloc ((size_t) PSIZE + 2); |
NULLPTRCHK(mbpartition,"symtab_init"); |
if (mbpartition != NULL) { |
|
shm_config->hdr->use_mb_globals = TRUE; |
shm_config->hdr->partition = mbpartition; |
shm_config->hdr->partition = mbpartition; |
|
} |
|
else { |
|
fprintf (stderr, "symtab_init: falling back to global-backed structured system variables\r\n"); |
|
shm_config->hdr->use_mb_globals = FALSE; |
|
} |
|
|
if (symtab_get_sem ()) { |
if (symtab_get_sem ()) { |
for (i = 0; i < 128; i++) shm_config->hdr->alphptr[i] = 0L; |
for (i = 0; i < 128; i++) shm_config->hdr->alphptr[i] = 0L; |
Line 151 void symtab_init (void)
|
Line 193 void symtab_init (void)
|
fprintf (stderr, "symtab_init: could not attach to symbol table semaphore\r\n"); |
fprintf (stderr, "symtab_init: could not attach to symbol table semaphore\r\n"); |
exit (1); |
exit (1); |
} |
} |
|
|
mbpartition = shm_config->hdr->partition; |
|
|
|
|
if (shm_config->hdr->use_mb_globals == TRUE) { |
|
mbpartition = SOA(shm_config->hdr->partition); |
|
} |
|
|
|
symtab_release_sem (); |
} |
} |
|
|
} |
} |
Line 179 short symtab_get_sem(void)
|
Line 224 short symtab_get_sem(void)
|
sleep (1); |
sleep (1); |
|
|
} |
} |
fprintf (stderr, "symtab_get_sem: fail\r\n"); |
logprintf (FM_LOG_ERROR, "symtab_get_sem: fail"); |
|
|
have_symtab_sem = FALSE; |
have_symtab_sem = FALSE; |
return FALSE; |
return FALSE; |
Line 204 void symtab_shm (short action, char *key
|
Line 249 void symtab_shm (short action, char *key
|
unsigned long stptrs[128]; |
unsigned long stptrs[128]; |
register int i; |
register int i; |
char *old_partition = partition; |
char *old_partition = partition; |
|
|
|
global (action, key, data); |
|
return; |
|
|
|
if (shm_config->hdr->use_mb_globals == FALSE) { |
|
symtab_bltin (action, key, data); |
|
return; |
|
} |
partition = mbpartition; |
partition = mbpartition; |
|
|
writing_mb = TRUE; |
writing_mb = TRUE; |
Line 355 void symtab_bltin (short action, char *k
|
Line 408 void symtab_bltin (short action, char *k
|
stcnv_m2c (tt_with); |
stcnv_m2c (tt_with); |
stcnv_m2c (tt_key); |
stcnv_m2c (tt_key); |
|
|
snprintf (key, 100, "%s%s\201\201", tt_with, tt_key); |
sprintf (key, "%s%s\201\201", tt_with, tt_key); |
|
|
|
|
no_with: |
no_with: |
Line 561 no_with:
|
Line 614 no_with:
|
/* OLD get_sym routine */ |
/* OLD get_sym routine */ |
if ((i = alphptr[(int) key[0]])) { |
if ((i = alphptr[(int) key[0]])) { |
|
|
// printf ("alphptr match; writing_mb = %d\r\n", writing_mb); |
/* printf ("alphptr match; writing_mb = %d\r\n", writing_mb); */ |
|
|
k = 1; |
k = 1; |
j = i + 1; /* first char always matches! */ |
j = i + 1; /* first char always matches! */ |
Line 610 no_with:
|
Line 663 no_with:
|
|
|
return; |
return; |
|
|
|
|
|
|
|
|
|
|
case set_sym: /* store/create variable */ |
case set_sym: /* store/create variable */ |
|
|
|
|
Line 946 old0: /* entry from getinc */
|
Line 995 old0: /* entry from getinc */
|
/* end of set_sym section */ |
/* end of set_sym section */ |
|
|
|
|
case dat: |
case fra_dat: |
|
|
|
|
/* note: we assume EOL<DELIM<ASCII */ |
/* note: we assume EOL<DELIM<ASCII */ |
Line 1811 zinvend:
|
Line 1860 zinvend:
|
*newptr++ = k1; |
*newptr++ = k1; |
*newptr++ = set_sym; |
*newptr++ = set_sym; |
|
|
//if (mcmnd != ZNEW) test = FALSE; |
/*if (mcmnd != ZNEW) test = FALSE; */ |
|
|
return; |
return; |
|
|
Line 1878 zinvend:
|
Line 1927 zinvend:
|
|
|
char esbuf[256]; |
char esbuf[256]; |
|
|
snprintf (esbuf, 255, "%d\201", estack); |
snprintf (esbuf, sizeof (esbuf) - 1, "%d\201", estack); |
|
|
j = stcpy (newptr, esbuf); |
j = stcpy (newptr, esbuf); |
|
|