diff options
-rw-r--r-- | net/server_epoll.lua | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/net/server_epoll.lua b/net/server_epoll.lua index 0513e315..9ef14a78 100644 --- a/net/server_epoll.lua +++ b/net/server_epoll.lua @@ -35,6 +35,7 @@ local default_config = { __index = { connect_timeout = 20; handshake_timeout = 60; max_wait = 86400; + min_wait = 1e-06; }}; local cfg = default_config.__index; @@ -68,7 +69,7 @@ end -- Run callbacks of expired timers -- Return time until next timeout -local function runtimers(next_delay) +local function runtimers(next_delay, min_wait) -- Any timers at all? if not timers[1] then return next_delay; @@ -104,14 +105,16 @@ local function runtimers(next_delay) t_remove(timers, i); end end - if resort_timers or next_delay < 1e-6 then + + if resort_timers or next_delay < min_wait then -- Timers may be added from within a timer callback. -- Those would not be considered for next_delay, -- and we might sleep for too long, so instead -- we return a shorter timeout so we can -- properly sort all new timers. - next_delay = 1e-6; + next_delay = min_wait; end + return next_delay; end @@ -602,7 +605,7 @@ end -- Main loop local function loop() repeat - local t = runtimers(cfg.max_wait); + local t = runtimers(cfg.max_wait, cfg.min_wait); local fd, r, w = epoll.wait(t); if fd then local conn = fds[fd]; |