});
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);
}
int n = select(fds, &readable, &writable, NULL, (struct timeval *)&tv);
#endif
- pthread_mutex_lock(mutex);
+ if(pthread_mutex_lock(mutex) != 0) {
+ abort();
+ }
clock_gettime(EVENT_CLOCK, &loop->now);
return true;
}
-void event_flush_output(event_loop_t *loop) {
- for splay_each(io_t, io, &loop->ios)
- if(FD_ISSET(io->fd, &loop->writefds)) {
- io->cb(loop, io->data, IO_WRITE);
- }
-}
-
void event_loop_start(event_loop_t *loop) {
loop->running = true;
}
assert(!loop->signals.count);
for splay_each(io_t, io, &loop->ios) {
- splay_unlink_node(&loop->ios, node);
+ splay_unlink_node(&loop->ios, splay_node);
}
for splay_each(timeout_t, timeout, &loop->timeouts) {
- splay_unlink_node(&loop->timeouts, node);
+ splay_unlink_node(&loop->timeouts, splay_node);
}
for splay_each(signal_t, signal, &loop->signals) {
- splay_unlink_node(&loop->signals, node);
+ splay_unlink_node(&loop->signals, splay_node);
}
}