--- freem/src/shmmgr.c 2025/05/12 14:26:15 1.16 +++ freem/src/shmmgr.c 2025/05/12 18:18:00 1.17 @@ -1,5 +1,5 @@ /* - * $Id: shmmgr.c,v 1.16 2025/05/12 14:26:15 snw Exp $ + * $Id: shmmgr.c,v 1.17 2025/05/12 18:18:00 snw Exp $ * shared memory manager * * @@ -24,6 +24,9 @@ * along with FreeM. If not, see . * * $Log: shmmgr.c,v $ + * Revision 1.17 2025/05/12 18:18:00 snw + * Further work on shared memory + * * Revision 1.16 2025/05/12 14:26:15 snw * Revert bad change in shared memory manager * @@ -128,7 +131,7 @@ short shm_init(const size_t seg_size) NULLPTRCHK(shm_config,"shm_init"); /* figure out how many pages we can fit in the segment, accounting for header size */ - shm_config->pgct = (seg_size / pg_size) - sizeof (shm_hdr_t); + shm_config->pgct = (seg_size - sizeof (shm_hdr_t)) / pg_size; /* how big will the alloc map be? */ alloc_map_size = shm_config->pgct * sizeof (shm_page_t); @@ -175,17 +178,11 @@ short shm_init(const size_t seg_size) daemon_chk = kill (shm_config->hdr->first_process, 0); if (daemon_chk == -1 && errno == ESRCH) { - logprintf (FM_LOG_WARNING, "shm_init: recovering from crashed daemon pid %ld", shm_config->hdr->first_process); - first_process = TRUE; - shm_daemon_init (); - } else { - - first_process = FALSE; semid_shm = semget (shm_sk, 1, 0); @@ -193,10 +190,7 @@ short shm_init(const size_t seg_size) logprintf (FM_LOG_FATAL, "shm_init: could not attach to shared memory semaphore [%s]", strerror (errno)); } - shm_config->buf = SHMALIGN(shm_config->dta + (sizeof (shm_hdr_t) * shm_config->pgct)); - - } }