|
|
| version 1.14, 2025/05/08 14:47:26 | version 1.18, 2025/05/16 04:25:15 |
|---|---|
| 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.18 2025/05/16 04:25:15 snw | |
| * Make shm seed NULL on ARM | |
| * | |
| * 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 | |
| * | |
| * Revision 1.15 2025/05/09 19:44:50 snw | |
| * Begin shm rework | |
| * | |
| * Revision 1.14 2025/05/08 14:47:26 snw | * Revision 1.14 2025/05/08 14:47:26 snw |
| * Break everything to begin shared memory rewrite | * Break everything to begin shared memory rewrite |
| * | * |
| Line 122 short shm_init(const size_t seg_size) | Line 134 short shm_init(const size_t seg_size) |
| NULLPTRCHK(shm_config,"shm_init"); | NULLPTRCHK(shm_config,"shm_init"); |
| /* figure out how many pages we can fit in the segment, accounting for header size */ | /* 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? */ | /* how big will the alloc map be? */ |
| alloc_map_size = shm_config->pgct * sizeof (shm_page_t); | alloc_map_size = shm_config->pgct * sizeof (shm_page_t); |
| Line 140 short shm_init(const size_t seg_size) | Line 152 short shm_init(const size_t seg_size) |
| return SHMS_GET_ERR; | return SHMS_GET_ERR; |
| } | } |
| #if !defined(__arm__) | |
| shm_config->dta = shmat (shm_config->seg_id, NULL, 0); | shm_config->dta = shmat (shm_config->seg_id, NULL, 0); |
| #else | |
| shm_config->dta = shmat (shm_config->seg_id, (void *) 0x1000000, 0); | |
| #endif | |
| if (shm_config->dta == (void *) -1) { | if (shm_config->dta == (void *) -1) { |
| logprintf (FM_LOG_FATAL, "shm_init: shmat() failed (error code %d [%s])", errno, strerror (errno)); | logprintf (FM_LOG_FATAL, "shm_init: shmat() failed (error code %d [%s])", errno, strerror (errno)); |
| Line 169 short shm_init(const size_t seg_size) | Line 177 short shm_init(const size_t seg_size) |
| daemon_chk = kill (shm_config->hdr->first_process, 0); | daemon_chk = kill (shm_config->hdr->first_process, 0); |
| if (daemon_chk == -1 && errno == ESRCH) { | if (daemon_chk == -1 && errno == ESRCH) { |
| logprintf (FM_LOG_WARNING, "shm_init: recovering from crashed daemon pid %ld", shm_config->hdr->first_process); | logprintf (FM_LOG_WARNING, "shm_init: recovering from crashed daemon pid %ld", shm_config->hdr->first_process); |
| first_process = TRUE; | first_process = TRUE; |
| shm_daemon_init (); | shm_daemon_init (); |
| } | } |
| else { | else { |
| first_process = FALSE; | first_process = FALSE; |
| semid_shm = semget (shm_sk, 1, 0); | semid_shm = semget (shm_sk, 1, 0); |
| Line 187 short shm_init(const size_t seg_size) | Line 189 short shm_init(const size_t seg_size) |
| logprintf (FM_LOG_FATAL, "shm_init: could not attach to shared memory semaphore [%s]", strerror (errno)); | 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)); | shm_config->buf = SHMALIGN(shm_config->dta + (sizeof (shm_hdr_t) * shm_config->pgct)); |
| } | } |
| } | } |