Diff for /freem/src/locktab.c between versions 1.7 and 1.9

version 1.7, 2025/05/01 21:02:31 version 1.9, 2025/05/15 02:49:11
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.9  2025/05/15 02:49:11  snw
    *   Fix linker error on errno symbol in locktab.c
    *
    *   Revision 1.8  2025/05/14 15:28:55  snw
    *   Get basic job table and lock table functionality working with new shared memory architecture
    *
  *   Revision 1.7  2025/05/01 21:02:31  snw   *   Revision 1.7  2025/05/01 21:02:31  snw
  *   Documentation updates   *   Documentation updates
  *   *
Line 46 Line 52
 #include <unistd.h>  #include <unistd.h>
 #include <time.h>  #include <time.h>
 #include <string.h>  #include <string.h>
   #include <errno.h>
   
 #include "mpsdef.h"  #include "mpsdef.h"
 #include "locktab.h"  #include "locktab.h"
Line 79  void locktab_init(void) Line 86  void locktab_init(void)
   
         semid_locktab = semget (lt_sk, 1, 0666 | IPC_CREAT);          semid_locktab = semget (lt_sk, 1, 0666 | IPC_CREAT);
         if (semid_locktab == -1) {          if (semid_locktab == -1) {
             fprintf (stderr, "locktab_init:  failed to create lock table semaphore\r\n");              logprintf (FM_LOG_FATAL, "locktab_init:  failed to create lock table semaphore");
             exit (1);  
         }          }
   
         arg.val = 1;          arg.val = 1;
         if (semctl (semid_locktab, 0, SETVAL, arg) == -1) {          if (semctl (semid_locktab, 0, SETVAL, arg) == -1) {
             fprintf (stderr, "locktab_init:  failed to initialize lock table semaphore\r\n");              logprintf (FM_LOG_FATAL, "locktab_init:  failed to initialize lock table semaphore");
             exit (1);  
         }          }
                   
     }      }
Line 94  void locktab_init(void) Line 99  void locktab_init(void)
   
         semid_locktab = semget (lt_sk, 1, 0);          semid_locktab = semget (lt_sk, 1, 0);
         if (semid_locktab == -1) {          if (semid_locktab == -1) {
             fprintf (stderr, "locktab_init:  could not attach to lock table semaphore\r\n");              logprintf (FM_LOG_FATAL, "locktab_init:  could not attach to lock table semaphore");
             exit (1);  
         }          }
                   
     }      }
Line 109  short locktab_get_sem(void) Line 113  short locktab_get_sem(void)
     int tries;      int tries;
     struct sembuf s = {0, -1, 0};      struct sembuf s = {0, -1, 0};
   
       logprintf (FM_LOG_DEBUG, "locktab_get_sem:  attempting to acquire lock table semaphore");
       
     for (tries = 0; tries < 5; tries++) {      for (tries = 0; tries < 5; tries++) {
   
         if (semop (semid_locktab, &s, 1) != -1) {          if (semop (semid_locktab, &s, 1) != -1) {
               logprintf (FM_LOG_DEBUG, "locktab_get_sem:  acquired semaphore by virtue of calling semop on it");
             return TRUE;              return TRUE;
         }          }
         printf ("jibjaw\r\n");  
           logprintf (FM_LOG_INFO, "locktab_get_sem:  sleeping for retry [tries = %d; errno = %d; error = %s]", tries, errno, strerror (errno));
         sleep (1);          sleep (1);
   
     }      }
       logprintf (FM_LOG_ERROR, "locktab_get_sem:  failed to acquire job table semaphore");
           
     return FALSE;      return FALSE;
 }  }
Line 126  void locktab_release_sem(void) Line 135  void locktab_release_sem(void)
 {  {
     struct sembuf s = {0, 1, 0};      struct sembuf s = {0, 1, 0};
   
     semop (semid_locktab, &s, 1);      logprintf (FM_LOG_DEBUG, "locktab_release_sem:  trying to release lock table semaphore");
       if(semop (semid_locktab, &s, 1) != - 1) {
           logprintf (FM_LOG_DEBUG, "locktab_release_sem:  released lock table semaphore by means of semop");
       }
       else {
           logprintf (FM_LOG_FATAL, "locktab_release_sem:  failed to release lock table semaphore (error code %d [%s])", errno, strerror (errno));
       }
   
 }  }
   
Line 441  void locktab_unlock_all_by_pid(const pid Line 456  void locktab_unlock_all_by_pid(const pid
     }      }
   
           
     for (lck = shm_config->hdr->locktab_head; lck != NULL; lck = lck->next) {      for (lck = SOA(shm_config->hdr->locktab_head); lck != NULL; lck = SOA(lck->next)) {
   
         if (lck->owner_job == target_pid) {          if (lck->owner_job == target_pid) {
             remove_ct++;              remove_ct++;
Line 481  locktab_ent_t *locktab_find(char *key) Line 496  locktab_ent_t *locktab_find(char *key)
         snprintf (chk_ns, sizeof (chk_ns) - 1, "%s", nsname);          snprintf (chk_ns, sizeof (chk_ns) - 1, "%s", nsname);
     }      }
   
     for (lck = shm_config->hdr->locktab_head; lck != NULL; lck = lck->next) {      for (lck = SOA(shm_config->hdr->locktab_head); lck != NULL; lck = SOA(lck->next)) {
   
         if ((stcmp (lck->nref, key) == 0) && (strcmp (lck->namespace, chk_ns) == 0)) {          if ((stcmp (lck->nref, key) == 0) && (strcmp (lck->namespace, chk_ns) == 0)) {
   
Line 525  locktab_ent_t *locktab_insert(char *key) Line 540  locktab_ent_t *locktab_insert(char *key)
         snprintf (chk_ns, sizeof (chk_ns) - 1, "%s", nsname);          snprintf (chk_ns, sizeof (chk_ns) - 1, "%s", nsname);
     }      }
           
     for (l = shm_config->hdr->locktab_head; l != NULL; l = l->next) {      for (l = SOA(shm_config->hdr->locktab_head); l != NULL; l = SOA(l->next)) {
         ok = mref_init (ok, MREF_RT_GLOBAL, "");          ok = mref_init (ok, MREF_RT_GLOBAL, "");
         ok = internal_to_mref (ok, l->nref);          ok = internal_to_mref (ok, l->nref);
                   
Line 579  new_insert: Line 594  new_insert:
     l->owner_job = pid;      l->owner_job = pid;
     l->ct = 1;      l->ct = 1;
           
     l->next = shm_config->hdr->locktab_head;      l->next = SBM(SOA(shm_config->hdr->locktab_head));
     shm_config->hdr->locktab_head = l;      shm_config->hdr->locktab_head = SBM(l);
   
     ssvn_lock_add (l->nref, l->owner_job, l->ct);      ssvn_lock_add (l->nref, l->owner_job, l->ct);
   
Line 596  int locktab_count(char *key) Line 611  int locktab_count(char *key)
     locktab_ent_t *l;      locktab_ent_t *l;
     int ct = 0;      int ct = 0;
   
     for (l = shm_config->hdr->locktab_head; l != NULL; l = l->next) {      for (l = SOA(shm_config->hdr->locktab_head); l != NULL; l = SOA(l->next)) {
         if (stcmp (l->nref, key) == 0) ct++;          if (stcmp (l->nref, key) == 0) ct++;
     }      }
   
Line 623  unsigned long locktab_pages(void) Line 638  unsigned long locktab_pages(void)
     unsigned long pages = 0;      unsigned long pages = 0;
     float extra;      float extra;
           
     for (l = shm_config->hdr->locktab_head; l != NULL; l = l->next) {      for (l = SOA(shm_config->hdr->locktab_head); l != NULL; l = SOA(l->next)) {
         bytes += sizeof (locktab_ent_t);          bytes += sizeof (locktab_ent_t);
     }      }
   
Line 645  unsigned long locktab_bytes(void) Line 660  unsigned long locktab_bytes(void)
     unsigned int ct = 0;      unsigned int ct = 0;
     unsigned long bytes = 0;      unsigned long bytes = 0;
   
     for (l = shm_config->hdr->locktab_head; l != NULL; l = l->next) {      for (l = SOA(shm_config->hdr->locktab_head); l != NULL; l = SOA(l->next)) {
         ct++;          ct++;
         bytes += sizeof (locktab_ent_t);          bytes += sizeof (locktab_ent_t);
     }      }
Line 672  void locktab_dump(void) Line 687  void locktab_dump(void)
     printf ("%-20s%-20s%-20s%s\r\n", "NAMESPACE", "PID", "COUNT", "KEY");      printf ("%-20s%-20s%-20s%s\r\n", "NAMESPACE", "PID", "COUNT", "KEY");
     printf ("%-20s%-20s%-20s%s\r\n", "---------", "---", "-----", "---");      printf ("%-20s%-20s%-20s%s\r\n", "---------", "---", "-----", "---");
   
     if (shm_config->hdr->locktab_head == NULL) {      if (SOA(shm_config->hdr->locktab_head) == NULL) {
         printf ("\r\n*** lock table empty ***\r\n");          printf ("\r\n*** lock table empty ***\r\n");
         free (r);          free (r);
         return;          return;
     }      }
   
           
     for (l = shm_config->hdr->locktab_head; l != NULL; l = l->next) {      for (l = SOA(shm_config->hdr->locktab_head); l != NULL; l = SOA(l->next)) {
   
         mref_init (r, MREF_RT_GLOBAL, "");          mref_init (r, MREF_RT_GLOBAL, "");
         internal_to_mref (r, l->nref);          internal_to_mref (r, l->nref);

Removed from v.1.7  
changed lines
  Added in v.1.9


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