});
if(sig) {
- sig->set = false;
+#ifdef HAVE_STDATOMIC_H
+ atomic_flag_clear(&sig->set);
+#endif
sig->cb(loop, sig->data);
}
}
}
void signal_trigger(event_loop_t *loop, signal_t *sig) {
- if(sig->set) {
+#ifdef HAVE_STDATOMIC_H
+
+ if(atomic_flag_test_and_set(&sig->set)) {
return;
}
+#endif
+
uint8_t signum = sig->signum;
- sig->set = true;
write(loop->pipefd[1], &signum, 1);
return;
}
sig->cb = cb;
sig->data = data;
sig->signum = signum;
- sig->set = false;
sig->node.data = sig;
+#ifdef HAVE_STDATOMIC_H
+ atomic_flag_clear(&sig->set);
+#endif
+
if(loop->pipefd[0] == -1) {
pipe_init(loop);
}
}
// release mesh mutex during select
- assert(pthread_mutex_unlock(mutex) == 0);
+ pthread_mutex_unlock(mutex);
#ifdef HAVE_PSELECT
int n = pselect(fds, &readable, &writable, NULL, &ts, NULL);
int n = select(fds, &readable, &writable, NULL, (struct timeval *)&tv);
#endif
- assert(pthread_mutex_lock(mutex) == 0);
+ if(pthread_mutex_lock(mutex) != 0) {
+ abort();
+ }
clock_gettime(EVENT_CLOCK, &loop->now);