X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fevent.c;h=62daea6f13cf3a6138116e67773c1c60502bd22a;hb=a387ef3cd807b90bbdf39581b6aea1bce9573f19;hp=b6def622023e0ade5f513af787225f1fba0c37f2;hpb=a1177c9aef02b7b9fb2702924d78c2b135a12ff2;p=meshlink diff --git a/src/event.c b/src/event.c index b6def622..62daea6f 100644 --- a/src/event.c +++ b/src/event.c @@ -177,7 +177,7 @@ void signal_del(event_loop_t *loop, signal_t *sig) { sig->cb = NULL; } -bool event_loop_run(event_loop_t *loop) { +bool event_loop_run(event_loop_t *loop, pthread_mutex_t *mutex) { loop->running = true; fd_set readable; @@ -211,7 +211,12 @@ bool event_loop_run(event_loop_t *loop) { fds = last->fd + 1; } + // release mesh mutex during select + if(mutex) + pthread_mutex_unlock(mutex); int n = select(fds, &readable, &writable, NULL, tv); + if(mutex) + pthread_mutex_lock(mutex); if(n < 0) { if(sockwouldblock(errno))