wangzhengquan
2020-07-21 91ec036cace39fd5b5f04644f6bced1f477005e0
src/util/sem_util.c
@@ -1,5 +1,7 @@
#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;
@@ -12,12 +14,12 @@
        union semun arg;
        struct sembuf sop;
        fprintf(stderr, "%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");
        fprintf(stderr, "%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. */
@@ -27,7 +29,7 @@
        sop.sem_flg = 0;
        if (semop(semid, &sop, 1) == -1)
            err_exit(errno, "semop");
        fprintf(stderr, "%ld: completed dummy semop()\n", (long) getpid());
    logger.info("%ld: completed dummy semop()\n", (long)getpid());
    } else {                            /* We didn't create the semaphore set */
@@ -44,12 +46,12 @@
            if (semid == -1)
                err_exit(errno, "semget 2");
            fprintf(stderr, "%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++) {
                fprintf(stderr, "Try %d\n", j);
        logger.info("Try %d\n", j);
                if (semctl(semid, 0, IPC_STAT, arg) == -1)
                    err_exit(errno, "semctl 2");
@@ -65,13 +67,11 @@
    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)
{
int SemUtil::dec(int semId) {
    struct sembuf sops;
    sops.sem_num = 0;
@@ -87,8 +87,7 @@
    return 0;
}
int SemUtil::dec_nowait(int semId)
{
int SemUtil::dec_nowait(int semId) {
    struct sembuf sops;
    sops.sem_num = 0;
@@ -104,8 +103,7 @@
    return 0;
}
int SemUtil::dec_timeout(int semId, struct timespec * timeout)
{
int SemUtil::dec_timeout(int semId, struct timespec *timeout) {
    struct sembuf sops;
    sops.sem_num = 0;
@@ -121,11 +119,8 @@
    return 0;
}
/* Release semaphore - increment it by 1 */
int SemUtil::inc(int semId)
{
int SemUtil::inc(int semId) {
    struct sembuf sops;
    sops.sem_num = 0;
@@ -143,16 +138,11 @@
    union semun dummy;
    if (semctl(semid, 0, IPC_RMID, dummy) == -1)
        err_msg(errno, "SemUtil::remove");
}
void SemUtil::set(int semId, int val)
{
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");
}