diff --git a/lib/libuv.c b/lib/libuv.c index 62681d36f..5d58e262e 100644 --- a/lib/libuv.c +++ b/lib/libuv.c @@ -262,6 +262,12 @@ static void lws_uv_walk_cb(uv_handle_t *handle, void *arg) uv_close(handle, lws_uv_close_cb); } +LWS_VISIBLE void +lws_close_all_handles_in_loop(uv_loop_t *loop) +{ + uv_walk(loop, lws_uv_walk_cb, NULL); +} + void lws_libuv_destroyloop(struct lws_context *context, int tsi) { diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h index 2e7939584..35287be27 100644 --- a/lib/libwebsockets.h +++ b/lib/libwebsockets.h @@ -3540,6 +3540,9 @@ lws_uv_getloop(struct lws_context *context, int tsi); LWS_VISIBLE LWS_EXTERN void lws_uv_sigint_cb(uv_signal_t *watcher, int signum); + +LWS_VISIBLE LWS_EXTERN void +lws_close_all_handles_in_loop(uv_loop_t *loop); #endif /* LWS_USE_LIBUV */ ///@} diff --git a/lwsws/main.c b/lwsws/main.c index 6f367719c..8688534c0 100644 --- a/lwsws/main.c +++ b/lwsws/main.c @@ -303,8 +303,9 @@ int main(int argc, char **argv) lws_context_destroy(context); #if (UV_VERSION_MAJOR > 0) // Travis... + lws_close_all_handles_in_loop(&loop); n = 0; - while (n++ < 1024 && uv_loop_close(&loop)) + while (n++ < 4096 && uv_loop_close(&loop)) uv_run(&loop, UV_RUN_NOWAIT); #endif