diff --git a/lib/libuv.c b/lib/libuv.c index bb1bee30..da1405c1 100644 --- a/lib/libuv.c +++ b/lib/libuv.c @@ -52,7 +52,7 @@ lws_uv_idle(uv_idle_t *handle if (!lws_service_adjust_timeout(pt->context, 1, pt->tid)) /* yes... come back again later */ lwsl_debug("%s: done again\n", __func__); - return; + return; } /* there is nobody who needs service forcing, shut down idle */ diff --git a/lib/lws-plat-unix.c b/lib/lws-plat-unix.c index adc80469..3466284f 100644 --- a/lib/lws-plat-unix.c +++ b/lib/lws-plat-unix.c @@ -144,6 +144,19 @@ lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi) context->service_tid = context->service_tid_detected; timeout_ms = lws_service_adjust_timeout(context, timeout_ms, tsi); + /* + * is there anybody with pending stuff that needs service forcing? + */ + if (!timeout_ms) { + /* -1 timeout means just do forced service */ + lws_plat_service_tsi(context, -1, pt->tid); + /* still somebody left who wants forced service? */ + if (!lws_service_adjust_timeout(context, 1, pt->tid)) { + /* yes... come back again later */ + lwsl_debug("%s: done again\n", __func__); + } + return 0; + } n = poll(pt->fds, pt->fds_count, timeout_ms);