From 5c912c70e9333298ff48f7ea15424f72ca977b99 Mon Sep 17 00:00:00 2001 From: Fu Juntang <StrongTiger_001@163.com> Date: 星期五, 17 九月 2021 09:43:55 +0800 Subject: [PATCH] Add the heartbeat logic feature. --- src/svsem.cpp | 50 ++++++++++++++++++-------------------------------- 1 files changed, 18 insertions(+), 32 deletions(-) diff --git a/src/svsem.cpp b/src/svsem.cpp index 82390b6..00e6dbc 100644 --- a/src/svsem.cpp +++ b/src/svsem.cpp @@ -1,7 +1,6 @@ #include "svsem.h" int svsem_get(key_t key, unsigned int value) { -// printf("==================svsem_get===============================\n"); int semid, perms; perms = S_IRUSR | S_IWUSR; @@ -12,8 +11,6 @@ union semun arg; struct sembuf sop; - //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"); @@ -21,8 +18,7 @@ arg.val = 1; if (semctl(semid, 1, SETVAL, arg) == -1) err_exit(errno, "semctl 2"); - //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. */ @@ -31,7 +27,6 @@ sop.sem_flg = 0; if (semop(semid, &sop, 1) == -1) err_exit(errno, "semop"); - //logger.info("%ld: completed dummy semop()\n", (long)getpid()); } else { /* We didn't create the semaphore set */ @@ -48,12 +43,10 @@ if (semid == -1) err_exit(errno, "semget 2"); - // 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); if (semctl(semid, 0, IPC_STAT, arg) == -1) err_exit(errno, "semctl 2"); @@ -82,8 +75,9 @@ while (semop(semid, &sops, 1) == -1) if (errno != EINTR) { - // err_msg(errno, "svsem_dec"); - return errno; + err_msg(errno, "svsem_dec"); + + return -1; } return 0; @@ -95,14 +89,9 @@ sops.sem_num = 0; sops.sem_op = -1; sops.sem_flg = IPC_NOWAIT | 0; + - while (semop(semid, &sops, 1) == -1) - if (errno != EINTR) { - // err_msg(errno, "svsem_dec_nowait"); - return errno; - } - - return 0; + return semop(semid, &sops, 1) ; } int svsem_timedwait(const int semid, const struct timespec *timeout) { @@ -115,7 +104,7 @@ while (semtimedop(semid, &sops, 1, timeout) == -1) if (errno != EINTR) { // err_msg(errno, "svsem_psem_timedwait"); - return errno; + return -1; } return 0; @@ -133,7 +122,7 @@ int rv = semop(semid, &sops, 1); if (rv == -1) { // err_msg(errno, "svsem_inc"); - return errno; + return -1; } return 0; } @@ -149,7 +138,7 @@ arg.val = 1; if (semctl(semid, 1, SETVAL, arg) == -1) { err_msg(errno, "svsem_set"); - return errno; + return -1; } //閲婃斁mutex @@ -165,7 +154,7 @@ while (semop(semid, sops, 2) == -1) if (errno != EINTR) { // err_msg(errno, "Svsvsem_dec"); - return errno; + return -1; } @@ -177,7 +166,7 @@ while (semop(semid, sops, 1) == -1) if (errno != EINTR) { // err_msg(errno, "Svsvsem_dec"); - return errno; + return -1; } return 0; @@ -190,7 +179,7 @@ if (semctl(semid, 1, SETVAL, arg) == -1) { err_msg(errno, "svsem_set"); - return errno; + return -1; } return 0; } @@ -212,7 +201,7 @@ while (semop(semid, &sops, 1) == -1) if (errno != EINTR) { // err_msg(errno, "svsem_zero"); - return errno; + return -1; } return 0; @@ -229,7 +218,7 @@ while (semop(semid, &sops, 1) == -1) if (errno != EINTR) { // err_msg(errno, "svsem_zero_nowait"); - return errno; + return -1; } return 0; @@ -245,7 +234,7 @@ while (semtimedop(semid, &sops, 1, timeout) == -1) if (errno != EINTR) { // err_msg(errno, "svsem_zero_timeout"); - return errno; + return -1; } return 0; @@ -257,11 +246,8 @@ int svsem_set(int semid, int val) { union semun arg; arg.val = val; - if (semctl(semid, 0, SETVAL, arg) == -1) { - err_msg(errno, "svsem_set"); - return errno; - } - return 0; + + return semctl(semid, 0, SETVAL, arg); } @@ -274,4 +260,4 @@ - \ No newline at end of file + -- Gitblit v1.8.0