X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;ds=sidebyside;f=src%2Fevent.c;h=43e4e0401d941601b0ffc3818720655a0edc505c;hb=ce76e2051ce668ff4623263215bf4b38cfca46ca;hp=5e9763e2702835672c760d93115787308726dab6;hpb=cb2c4617316df5b467c6a76bf118ee65f6e1c3a2;p=meshlink diff --git a/src/event.c b/src/event.c index 5e9763e2..43e4e040 100644 --- a/src/event.c +++ b/src/event.c @@ -199,7 +199,7 @@ static void signalio_handler(event_loop_t *loop, void *data, int flags) { }); if(sig) { - sig->set = false; + atomic_flag_clear(&sig->set); sig->cb(loop, sig->data); } } @@ -224,12 +224,11 @@ static void pipe_exit(event_loop_t *loop) { } void signal_trigger(event_loop_t *loop, signal_t *sig) { - if(sig->set) { + if(atomic_flag_test_and_set(&sig->set)) { return; } uint8_t signum = sig->signum; - sig->set = true; write(loop->pipefd[1], &signum, 1); return; } @@ -240,9 +239,10 @@ void signal_add(event_loop_t *loop, signal_t *sig, signal_cb_t cb, void *data, u sig->cb = cb; sig->data = data; sig->signum = signum; - sig->set = false; sig->node.data = sig; + atomic_flag_clear(&sig->set); + if(loop->pipefd[0] == -1) { pipe_init(loop); }