14 rl_log(
ERROR,
"failed to create semaphores. Errno = %d", errno);
26 if(semctl(sem_id,
DATA_SEM, IPC_RMID) < 0) {
27 rl_log(
ERROR,
"failed to remove semaphores. Errno = %d", errno);
40 rl_log(
ERROR,
"failed to open semaphores. Errno = %d", errno);
56 struct sembuf sem_ops = {sem_num, sem_op,
NO_FLAG};
57 struct timespec t_out = {time_out, 0};
59 if(semtimedop(sem_id, &sem_ops, num_ops, &t_out) < 0) {
63 }
else if(errno == EIDRM) {
64 rl_log(
INFO,
"waiting on semaphore failed: semaphore removed");
66 }
else if(errno == EINVAL) {
67 rl_log(
WARNING,
"waiting on semaphore failed: semaphore not existing");
70 rl_log(
ERROR,
"failed doing operation on semaphore. Errno = %d", errno);
89 struct sembuf sem_ops = {sem_num, sem_op,
NO_FLAG};
92 if(semtimedop(sem_id, &sem_ops, num_ops, &time_out) < 0) {
97 rl_log(
ERROR,
"failed doing operation on semaphore. Errno = %d", errno);
#define NUM_SEMS
Number of semaphores in set.
void rl_log(rl_log_type type, const char *format,...)
#define SEM_KEY
Semaphore key (used for set creation)
int set_sem(int sem_id, int sem_num, int val)
int wait_sem(int sem_id, int sem_num, int time_out)
int sem_id
ID of semaphore set.
#define DATA_SEM
Number of data semaphore in set (manages access to shared memory data)
int remove_sem(int sem_id)
#define SEM_SET_TIME_OUT
Time out time in seconds, waiting on semaphore value set.