Diff for /freem/src/transact.c between versions 1.7 and 1.11

version 1.7, 2025/04/09 19:52:02 version 1.11, 2025/04/15 18:19:40
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.11  2025/04/15 18:19:40  snw
    *   Further attempts to fix FreeBSD
    *
    *   Revision 1.10  2025/04/15 16:49:36  snw
    *   Make use of logprintf throughout codebase
    *
    *   Revision 1.9  2025/04/13 04:22:43  snw
    *   Fix snprintf calls
    *
    *   Revision 1.8  2025/04/10 01:24:39  snw
    *   Remove C++ style comments
    *
  *   Revision 1.7  2025/04/09 19:52:02  snw   *   Revision 1.7  2025/04/09 19:52:02  snw
  *   Eliminate as many warnings as possible while building with -Wall   *   Eliminate as many warnings as possible while building with -Wall
  *   *
Line 55 Line 67
 #include "shmmgr.h"  #include "shmmgr.h"
 #include "mref.h"  #include "mref.h"
 #include "tp_check.h"  #include "tp_check.h"
   #include "log.h"
   
 #define FALSE   0  #define FALSE   0
 #define TRUE    1  #define TRUE    1
Line 69  union semun { Line 82  union semun {
 };  };
 #endif  #endif
   
 void m_log (int, const char *);  
   
 int semid_tp;  int semid_tp;
 int tp_committing = FALSE;  int tp_committing = FALSE;
 int tp_level = 0;  int tp_level = 0;
Line 87  void tp_init(void) Line 98  void tp_init(void)
     if (first_process) {      if (first_process) {
   
         semid_tp = semget (tp_sk, 1, 0666 | IPC_CREAT);          semid_tp = semget (tp_sk, 1, 0666 | IPC_CREAT);
           
         if (semid_tp == -1) {          if (semid_tp == -1) {
             fprintf (stderr, "tp_init:  failed to create transaction processing semaphore [errno %d]\r\n", errno);              logprintf (FM_LOG_FATAL, "tp_init:  failed to create transaction processing semaphore [%s]", strerror (errno));
             exit (1);          }
           else {
               logprintf (FM_LOG_INFO, "tp_init:  got semaphore id %d", semid_tp);
         }          }
   
         arg.val = 1;          arg.val = 1;
         if (semctl (semid_tp, 0, SETVAL, arg) == -1) {          if (semctl (semid_tp, 0, SETVAL, arg) == -1) {
             fprintf (stderr, "tp_init:  failed to initialize transaction processing semaphore\r\n");              logprintf (FM_LOG_FATAL, "tp_init:  failed to initialize transaction processing semaphore [%s]", strerror (errno));
             exit (1);  
         }          }
   
     }      }
Line 103  void tp_init(void) Line 116  void tp_init(void)
                   
         semid_tp = semget (tp_sk, 1, 0);          semid_tp = semget (tp_sk, 1, 0);
         if (semid_tp == -1) {          if (semid_tp == -1) {
             fprintf (stderr, "tp_init:  could not attach to transaction processing semaphore [errno %d]\r\n", errno);              logprintf (FM_LOG_FATAL, "tp_init:  could not attach to transaction processing semaphore [%s]", strerror (errno));
             exit (1);  
         }          }
   
     }      }
Line 120  short tp_get_sem(void) Line 132  short tp_get_sem(void)
   
     char msgbuf[100];      char msgbuf[100];
   
     snprintf (msgbuf, 99, "tp_get_sem:  process %d attempting to acquire transaction processing semaphore", pid);      logprintf (FM_LOG_INFO, "tp_get_sem:  process %d attempting to acquire transaction processing semaphore", pid);
     m_log (1, msgbuf);  
           
           
     /* our process already owns the semaphore */      /* our process already owns the semaphore */
     if (shm_config->hdr->tp_owner == pid) {      if (shm_config->hdr->tp_owner == pid) {
   
         snprintf (msgbuf, 99, "tp_get_sem:  process %d increments transaction processing semaphore counter", pid);          logprintf (FM_LOG_INFO, "tp_get_sem:  process %ld increments transaction processing semaphore counter", pid);
         m_log (1, msgbuf);  
           
                   
         if (first_process == TRUE) {          if (first_process == TRUE) {
             fprintf (stderr, "tp_get_sem:  daemon process increments critical section counter\r\n");              logprintf (FM_LOG_INFO, "tp_get_sem:  daemon process increments critical section counter");
         }          }
   
   
Line 142  short tp_get_sem(void) Line 152  short tp_get_sem(void)
     }      }
   
     if (first_process == TRUE) {      if (first_process == TRUE) {
         fprintf (stderr, "tp_get_sem:  daemon process enters critical section\r\n");          logprintf (FM_LOG_INFO, "tp_get_sem:  daemon process enters critical section");
     }      }
   
           
Line 152  short tp_get_sem(void) Line 162  short tp_get_sem(void)
             shm_config->hdr->tp_owner = pid;              shm_config->hdr->tp_owner = pid;
             shm_config->hdr->tp_semctr = 1;              shm_config->hdr->tp_semctr = 1;
   
             snprintf (msgbuf, 99, "tp_get_sem:  process %d takes transaction processing semaphore", pid);              logprintf (FM_LOG_INFO, "tp_get_sem:  process %ld takes transaction processing semaphore", pid);
             m_log (1, msgbuf);  
       
                           
             if (first_process == TRUE) {              if (first_process == TRUE) {
                 fprintf (stderr, "tp_get_sem:  daemon process takes transaction processing semaphore\r\n");                  logprintf (FM_LOG_INFO, "tp_get_sem:  daemon process takes transaction processing semaphore");
             }              }
   
             return TRUE;              return TRUE;
         }          }
   
         snprintf (msgbuf, 99, "tp_get_sem:  process %d attempting to acquire transaction processing semaphore (tries = %d)", pid, tries);          logprintf (FM_LOG_WARNING, "tp_get_sem:  process %ld retries attempting to acquire transaction processing semaphore (tries = %d)", pid, tries);
         m_log (1, msgbuf);  
       
   
         sleep (1);          sleep (1);
   
Line 185  void tp_release_sem(void) Line 191  void tp_release_sem(void)
         struct sembuf s = {0, 1, 0};          struct sembuf s = {0, 1, 0};
   
         if (first_process == TRUE) {          if (first_process == TRUE) {
             fprintf (stderr, "tp_release_sem:  daemon process leaves critical section\r\n");              logprintf (FM_LOG_INFO, "tp_release_sem:  daemon process leaves critical section");
         }          }
   
                   
Line 193  void tp_release_sem(void) Line 199  void tp_release_sem(void)
         shm_config->hdr->tp_owner = 0;          shm_config->hdr->tp_owner = 0;
   
         if (first_process == TRUE) {          if (first_process == TRUE) {
             fprintf (stderr, "tp_release_sem:  daemon process relinquishes transaction processing semaphore\r\n");              logprintf (FM_LOG_INFO, "tp_release_sem:  daemon process relinquishes transaction processing semaphore");
         }          }
   
   
         snprintf (msgbuf, 99, "tp_get_sem:  process %d releases transaction processing semaphore", pid);          logprintf (FM_LOG_INFO, "tp_get_sem:  process %ld releases transaction processing semaphore", pid);
         m_log (1, msgbuf);  
   
                   
         semop (semid_tp, &s, 1);          semop (semid_tp, &s, 1);
                   
Line 207  void tp_release_sem(void) Line 211  void tp_release_sem(void)
     else {      else {
   
         if (first_process == TRUE) {          if (first_process == TRUE) {
             fprintf (stderr, "tp_release_sem:  daemon process decrements critical section counter\r\n");              logprintf (FM_LOG_INFO, "tp_release_sem:  daemon process decrements critical section counter");
         }          }
                   
         snprintf (msgbuf, 99, "tp_get_sem:  process %d decrements transaction processing semaphore counter", pid);          logprintf (FM_LOG_INFO, "tp_get_sem:  process %d decrements transaction processing semaphore counter", pid);
         m_log (1, msgbuf);  
                   
         shm_config->hdr->tp_semctr--;          shm_config->hdr->tp_semctr--;
     }      }
Line 224  int tp_tstart(char *tp_id, short serial, Line 227  int tp_tstart(char *tp_id, short serial,
     if (tp_level == TP_MAX_NEST) {      if (tp_level == TP_MAX_NEST) {
         char m[256];          char m[256];
   
         snprintf (m, 256, "Attempt to exceed TP_MAX_NEST. Transaction aborted.\r\n\201");          logprintf (FM_LOG_ERROR, "Attempt to exceed TP_MAX_NEST. Transaction aborted.");
         write_m (m);  
   
         return FALSE;          return FALSE;
     }      }
Line 248  int tp_tstart(char *tp_id, short serial, Line 250  int tp_tstart(char *tp_id, short serial,
                   
     }      }
     else {      else {
         fprintf (stderr, "tp_tstart:  could not get transaction processing semaphore\r\n");          logprintf (FM_LOG_FATAL, "tp_tstart:  could not get transaction processing semaphore");
         exit (1);  
     }      }
           
   
Line 269  int tp_add_op(short islock, short action Line 270  int tp_add_op(short islock, short action
     if (transactions[tp_level].opcount == TP_MAX_OPS) {      if (transactions[tp_level].opcount == TP_MAX_OPS) {
         char m[256];          char m[256];
   
         snprintf (m, 256, "Attempt to exceed TP_MAX_OPS at transaction level %d. Rolling back.\r\n\201", tp_level);          logprintf (FM_LOG_ERROR, "attempt to exceed TP_MAX_OPS at transaction level %d; rolling back", tp_level);
         write_m (m);  
   
         free (gr);          free (gr);
   
Line 387  int tp_trollback(int levels) Line 387  int tp_trollback(int levels)
     register int i;      register int i;
     register int j;      register int j;
   
 //    for (i = 0; i < levels; i++) {  
     for (i = tp_level; i >= (((tp_level - levels) >= 0) ? tp_level - levels : 0); i--) {      for (i = tp_level; i >= (((tp_level - levels) >= 0) ? tp_level - levels : 0); i--) {
                   
         for (j = 1; j <= transactions[i].opcount; j++) {          for (j = 1; j <= transactions[i].opcount; j++) {

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


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