wangzhengquan
2020-09-25 00dba6082e245d917cb7d6eed3c627211ff41cd7
src/util/sem_util.c
@@ -4,6 +4,7 @@
static Logger logger = LoggerFactory::getLogger();
int SemUtil::get(key_t key, unsigned int value) {
// printf("==================SemUtil::get===============================\n");
  int semid, perms;
  perms = S_IRUSR | S_IWUSR;
@@ -14,12 +15,12 @@
    union semun arg;
    struct sembuf sop;
    logger.info("%ld: created semaphore\n", (long)getpid());
    //logger.info("%ld: created semaphore\n", (long)getpid());
    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());
    //logger.info("%ld: initialized semaphore\n", (long)getpid());
    /* Perform a "no-op" semaphore operation - changes sem_otime
       so other processes can see we've initialized the set. */
@@ -29,7 +30,7 @@
    sop.sem_flg = 0;
    if (semop(semid, &sop, 1) == -1)
      err_exit(errno, "semop");
    logger.info("%ld: completed dummy semop()\n", (long)getpid());
    //logger.info("%ld: completed dummy semop()\n", (long)getpid());
  } else { /* We didn't create the semaphore set */
@@ -46,12 +47,12 @@
      if (semid == -1)
        err_exit(errno, "semget 2");
      logger.info("%ld: got semaphore key\n", (long)getpid());
     // logger.info("%ld: got semaphore key\n", (long)getpid());
      /* Wait until another process has called semop() */
      arg.buf = &ds;
      for (j = 0; j < MAX_TRIES; j++) {
        logger.info("Try %d\n", j);
        //logger.info("Try %d\n", j);
        if (semctl(semid, 0, IPC_STAT, arg) == -1)
          err_exit(errno, "semctl 2");
@@ -72,6 +73,7 @@
/* Reserve semaphore - decrement it by 1 */
int SemUtil::dec(int semId) {
// logger.debug("%d: SemUtil::dec\n", semId);
  struct sembuf sops;
  sops.sem_num = 0;
@@ -103,7 +105,7 @@
  return 0;
}
int SemUtil::dec_timeout(int semId, struct timespec *timeout) {
int SemUtil::dec_timeout(const int semId, const struct timespec *timeout) {
  struct sembuf sops;
  sops.sem_num = 0;
@@ -112,7 +114,7 @@
  while (semtimedop(semId, &sops, 1, timeout) == -1)
    if (errno != EINTR) {
      err_msg(errno, "SemUtil::dec_timeout");
     // err_msg(errno, "SemUtil::dec_timeout");
      return -1;
    }