unix: fix event loop block, prepare/check invoke

Don't block in epoll_wait() / kevent() / etc. syscall unless there are active
handles. If there are only active requests, do a non-blocking poll.

Likewise, don't run the prepare and check watchers unless there are active
handles *or* requests.
This commit is contained in:
Ben Noordhuis 2012-05-21 17:32:38 +02:00
parent d27a62deff
commit 6fd9bfb7b0

View File

@ -210,12 +210,12 @@ static int uv__run(uv_loop_t* loop) {
*/
uv__run_pending(loop);
uv__run_prepare(loop);
if (uv__has_active_handles(loop) || uv__has_active_reqs(loop))
uv__poll(loop, 1);
uv__run_check(loop);
if (uv__has_active_handles(loop) || uv__has_active_reqs(loop)) {
uv__run_prepare(loop);
uv__poll(loop, uv__has_active_handles(loop));
uv__run_check(loop);
}
return uv__has_pending_handles(loop)
|| uv__has_active_handles(loop)