wangzhengquan
2020-07-20 f85c9b875b060681b51f57b15074ba1c7c9f5636
queue/sem_util.c
@@ -79,8 +79,10 @@
    sops.sem_flg =  0;
    while (semop(semId, &sops, 1) == -1)
        if (errno != EINTR )
        if (errno != EINTR ) {
            err_msg(errno, "SemUtil::dec");
            return -1;
        }
    return 0;
}
@@ -94,8 +96,10 @@
    sops.sem_flg =  IPC_NOWAIT;
    while (semop(semId, &sops, 1) == -1)
        if (errno != EINTR )
        if (errno != EINTR ) {
            err_msg(errno, "SemUtil::dec_nowait");
            return -1;
        }
    return 0;
}
@@ -109,8 +113,10 @@
    sops.sem_flg = 0;
    while ( semtimedop(semId, &sops, 1, timeout) == -1)
        if (errno != EINTR )
        if (errno != EINTR ) {
            err_msg(errno, "SemUtil::dec_timeout");
            return -1;
        }
    return 0;
}
@@ -126,13 +132,27 @@
    sops.sem_op = 1;
    sops.sem_flg = 0;
    return semop(semId, &sops, 1);
    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_exit(errno, "semctl");
        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");
}