From 91ec036cace39fd5b5f04644f6bced1f477005e0 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期二, 21 七月 2020 19:33:28 +0800
Subject: [PATCH] update

---
 src/util/sem_util.c |  208 ++++++++++++++++++++++++---------------------------
 1 files changed, 99 insertions(+), 109 deletions(-)

diff --git a/src/util/sem_util.c b/src/util/sem_util.c
index ceedac3..e2b2c20 100644
--- a/src/util/sem_util.c
+++ b/src/util/sem_util.c
@@ -1,158 +1,148 @@
 #include "sem_util.h"
+#include "logger_factory.h"
 
+static Logger logger = LoggerFactory::getLogger();
 
 int SemUtil::get(key_t key, unsigned int value) {
-    int semid, perms;
-     
-    perms = S_IRUSR | S_IWUSR;
+  int semid, perms;
 
-    semid = semget(key, 1, IPC_CREAT | IPC_EXCL | perms);
+  perms = S_IRUSR | S_IWUSR;
 
-    if (semid != -1) {                  /* Successfully created the semaphore */
-        union semun arg;
-        struct sembuf sop;
+  semid = semget(key, 1, IPC_CREAT | IPC_EXCL | perms);
 
-        fprintf(stderr, "%ld: created semaphore\n", (long) getpid());
+  if (semid != -1) { /* Successfully created the semaphore */
+    union semun arg;
+    struct sembuf sop;
 
-        arg.val = 0;                    /* So initialize it to 0 */
-        if (semctl(semid, 0, SETVAL, arg) == -1)
-            err_exit(errno, "semctl 1");
-        fprintf(stderr, "%ld: initialized semaphore\n", (long) getpid());
+    logger.info("%ld: created semaphore\n", (long)getpid());
 
-        /* Perform a "no-op" semaphore operation - changes sem_otime
-           so other processes can see we've initialized the set. */
+    arg.val = 0; /* So initialize it to 0 */
+    if (semctl(semid, 0, SETVAL, arg) == -1)
+      err_exit(errno, "semctl 1");
+    logger.info("%ld: initialized semaphore\n", (long)getpid());
 
-        sop.sem_num = 0;                /* Operate on semaphore 0 */
-        sop.sem_op = value;                
-        sop.sem_flg = 0;
-        if (semop(semid, &sop, 1) == -1)
-            err_exit(errno, "semop");
-        fprintf(stderr, "%ld: completed dummy semop()\n", (long) getpid());
+    /* Perform a "no-op" semaphore operation - changes sem_otime
+       so other processes can see we've initialized the set. */
 
-    } else {                            /* We didn't create the semaphore set */
+    sop.sem_num = 0; /* Operate on semaphore 0 */
+    sop.sem_op = value;
+    sop.sem_flg = 0;
+    if (semop(semid, &sop, 1) == -1)
+      err_exit(errno, "semop");
+    logger.info("%ld: completed dummy semop()\n", (long)getpid());
 
-        if (errno != EEXIST) {          /* Unexpected error from semget() */
-            err_exit(errno, "semget 1");
+  } else { /* We didn't create the semaphore set */
 
-        } else {                        /* Someone else already created it */
-            const int MAX_TRIES = 10;
-            int j;
-            union semun arg;
-            struct semid_ds ds;
+    if (errno != EEXIST) { /* Unexpected error from semget() */
+      err_exit(errno, "semget 1");
 
-            semid = semget(key, 1, perms);      /* So just get ID */
-            if (semid == -1)
-                err_exit(errno, "semget 2");
+    } else { /* Someone else already created it */
+      const int MAX_TRIES = 10;
+      int j;
+      union semun arg;
+      struct semid_ds ds;
 
-            fprintf(stderr, "%ld: got semaphore key\n", (long) getpid());
-            /* Wait until another process has called semop() */
+      semid = semget(key, 1, perms); /* So just get ID */
+      if (semid == -1)
+        err_exit(errno, "semget 2");
 
-            arg.buf = &ds;
-            for (j = 0; j < MAX_TRIES; j++) {
-                fprintf(stderr, "Try %d\n", j);
-                if (semctl(semid, 0, IPC_STAT, arg) == -1)
-                    err_exit(errno, "semctl 2");
+      logger.info("%ld: got semaphore key\n", (long)getpid());
+      /* Wait until another process has called semop() */
 
-                if (ds.sem_otime != 0)          /* Semop() performed? */
-                    break;                      /* Yes, quit loop */
-                sleep(1);                       /* If not, wait and retry */
-            }
+      arg.buf = &ds;
+      for (j = 0; j < MAX_TRIES; j++) {
+        logger.info("Try %d\n", j);
+        if (semctl(semid, 0, IPC_STAT, arg) == -1)
+          err_exit(errno, "semctl 2");
 
-            if (ds.sem_otime == 0)              /* Loop ran to completion! */
-                err_exit(errno, "Existing semaphore not initialized");
-        }
+        if (ds.sem_otime != 0) /* Semop() performed? */
+          break;               /* Yes, quit loop */
+        sleep(1);              /* If not, wait and retry */
+      }
+
+      if (ds.sem_otime == 0) /* Loop ran to completion! */
+        err_exit(errno, "Existing semaphore not initialized");
     }
-    return semid;
+  }
+  return semid;
 }
-
 
 /* Reserve semaphore (blocking), return 0 on success, or -1 with 'errno'
    set to EINTR if operation was interrupted by a signal handler */
 
 /* Reserve semaphore - decrement it by 1 */
-int SemUtil::dec(int semId)
-{
-    struct sembuf sops;
+int SemUtil::dec(int semId) {
+  struct sembuf sops;
 
-    sops.sem_num = 0;
-    sops.sem_op = -1;
-    sops.sem_flg =  0;
+  sops.sem_num = 0;
+  sops.sem_op = -1;
+  sops.sem_flg = 0;
 
-    while (semop(semId, &sops, 1) == -1)
-        if (errno != EINTR ) {
-            err_msg(errno, "SemUtil::dec");
-            return -1;
-        }
+  while (semop(semId, &sops, 1) == -1)
+    if (errno != EINTR) {
+      err_msg(errno, "SemUtil::dec");
+      return -1;
+    }
 
-    return 0;
+  return 0;
 }
 
-int SemUtil::dec_nowait(int semId)
-{
-    struct sembuf sops;
+int SemUtil::dec_nowait(int semId) {
+  struct sembuf sops;
 
-    sops.sem_num = 0;
-    sops.sem_op = -1;
-    sops.sem_flg =  IPC_NOWAIT;
+  sops.sem_num = 0;
+  sops.sem_op = -1;
+  sops.sem_flg = IPC_NOWAIT;
 
-    while (semop(semId, &sops, 1) == -1)
-        if (errno != EINTR ) {
-            err_msg(errno, "SemUtil::dec_nowait");
-            return -1;
-        }
+  while (semop(semId, &sops, 1) == -1)
+    if (errno != EINTR) {
+      err_msg(errno, "SemUtil::dec_nowait");
+      return -1;
+    }
 
-    return 0;
+  return 0;
 }
 
-int SemUtil::dec_timeout(int semId, struct timespec * timeout)
-{
-    struct sembuf sops;
+int SemUtil::dec_timeout(int semId, struct timespec *timeout) {
+  struct sembuf sops;
 
-    sops.sem_num = 0;
-    sops.sem_op = -1;
-    sops.sem_flg = 0;
+  sops.sem_num = 0;
+  sops.sem_op = -1;
+  sops.sem_flg = 0;
 
-    while ( semtimedop(semId, &sops, 1, timeout) == -1)
-        if (errno != EINTR ) {
-            err_msg(errno, "SemUtil::dec_timeout");
-            return -1;
-        }
+  while (semtimedop(semId, &sops, 1, timeout) == -1)
+    if (errno != EINTR) {
+      err_msg(errno, "SemUtil::dec_timeout");
+      return -1;
+    }
 
-    return 0;
+  return 0;
 }
-
-
 
 /* Release semaphore - increment it by 1 */
-int SemUtil::inc(int semId)
-{
-    struct sembuf sops;
+int SemUtil::inc(int semId) {
+  struct sembuf sops;
 
-    sops.sem_num = 0;
-    sops.sem_op = 1;
-    sops.sem_flg = 0;
+  sops.sem_num = 0;
+  sops.sem_op = 1;
+  sops.sem_flg = 0;
 
-    int rv = semop(semId, &sops, 1);
-    if(rv == -1) {
-        err_msg(errno, "SemUtil::inc");
-    }
-    return rv;
+  int rv = semop(semId, &sops, 1);
+  if (rv == -1) {
+    err_msg(errno, "SemUtil::inc");
+  }
+  return rv;
 }
 
 void SemUtil::remove(int semid) {
-    union semun dummy;
-    if (semctl(semid, 0, IPC_RMID, dummy) == -1)
-        err_msg(errno, "SemUtil::remove");
-
+  union semun dummy;
+  if (semctl(semid, 0, IPC_RMID, dummy) == -1)
+    err_msg(errno, "SemUtil::remove");
 }
 
-
-void SemUtil::set(int semId, int val)
-{
-    union semun arg;
-    arg.val = val;
-    if (semctl(semId, 0, SETVAL, arg) == -1)
-        err_msg(errno, "SemUtil::set");
+void SemUtil::set(int semId, int val) {
+  union semun arg;
+  arg.val = val;
+  if (semctl(semId, 0, SETVAL, arg) == -1)
+    err_msg(errno, "SemUtil::set");
 }
-
-

--
Gitblit v1.8.0