Referring to this code...
Please also refer to this, which I think might be relevant.
After the call to uv_close() in the on_exit callback, the next time the following executes in core.c:498:
if ((mode == UV_RUN_ONCE && !ran_pending) || mode == UV_RUN_DEFAULT) timeout = uv_backend_timeout(loop);
uv_backend_timeout returns INFINITE. When the next loop then reaches core.c:420 (uv_poll_ex):
success = pGetQueuedCompletionStatusEx(loop->iocp, overlappeds, ARRAY_SIZE(overlappeds), &count, timeout, FALSE);
the program (unsurprisingly) hangs.
Two possible workarounds that fix the issue are:
-
call uv_stop(uv_default_loop()); after the call to uv_close(), or
-
in the last line in main.c, replace this:
return uv_run(loop, UV_RUN_DEFAULT);
with
while (0 != uv_run(loop, UV_RUN_ONCE)); return 0;
I am new to libuv. If the above two options are incorrect or ill-advised, what is the correct fix for this?