diff options
author | daurnimator <quae@daurnimator.com> | 2015-01-15 09:03:00 -0500 |
---|---|---|
committer | daurnimator <quae@daurnimator.com> | 2015-01-15 09:03:00 -0500 |
commit | 7a1a86aba7a1c1bacb7b082f8c94ec5ee20c405d (patch) | |
tree | ecf5bd4809a99cd7469e15c7721fe6a2af8cbe81 | |
parent | 9b719f1f477341c979e14d1561a24cb8553c65d3 (diff) | |
download | prosody-7a1a86aba7a1c1bacb7b082f8c94ec5ee20c405d.tar.gz prosody-7a1a86aba7a1c1bacb7b082f8c94ec5ee20c405d.zip |
net.server_select: Fix timers not being fired until another timer fixes (or 1 second passes)
-rw-r--r-- | net/server_select.lua | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/net/server_select.lua b/net/server_select.lua index d8404001..6d98ccac 100644 --- a/net/server_select.lua +++ b/net/server_select.lua @@ -115,8 +115,6 @@ local _checkinterval local _sendtimeout local _readtimeout -local _timer - local _maxselectlen local _maxfd @@ -890,8 +888,15 @@ end loop = function(once) -- this is the main loop of the program if quitting then return "quitting"; end if once then quitting = "once"; end - local next_timer_time = math_huge; + _currenttime = luasocket_gettime( ) repeat + -- Fire timers + local next_timer_time = math_huge; + for i = 1, _timerlistlen do + local t = _timerlist[ i ]( _currenttime ) -- fire timers + if t then next_timer_time = math_min(next_timer_time, t); end + end + local read, write, err = socket_select( _readlist, _sendlist, math_min(_selecttimeout, next_timer_time) ) for i, socket in ipairs( write ) do -- send data waiting in writequeues local handler = _socketlist[ socket ] @@ -940,18 +945,6 @@ loop = function(once) -- this is the main loop of the program end end - -- Fire timers - if _currenttime - _timer >= math_min(next_timer_time, 1) then - next_timer_time = math_huge; - for i = 1, _timerlistlen do - local t = _timerlist[ i ]( _currenttime ) -- fire timers - if t then next_timer_time = math_min(next_timer_time, t); end - end - _timer = _currenttime - else - next_timer_time = next_timer_time - (_currenttime - _timer); - end - -- wait some time (0 by default) socket_sleep( _sleeptime ) until quitting; @@ -1037,7 +1030,6 @@ use "setmetatable" ( _socketlist, { __mode = "k" } ) use "setmetatable" ( _readtimes, { __mode = "k" } ) use "setmetatable" ( _writetimes, { __mode = "k" } ) -_timer = luasocket_gettime( ) _starttime = luasocket_gettime( ) local function setlogger(new_logger) |