Diff for /freem/src/shmmgr.c between versions 1.15 and 1.18

version 1.15, 2025/05/09 19:44:50 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   *   Revision 1.15  2025/05/09 19:44:50  snw
  *   Begin shm rework   *   Begin shm rework
  *   *
Line 125  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 143  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 172  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 190  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 = SBM(SHMALIGN(SOM(shm_config->dta) + (sizeof (shm_hdr_t) * shm_config->pgct)));  
   
           
         }          }
   
     }      }

Removed from v.1.15  
changed lines
  Added in v.1.18


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>