Software /
code /
prosody
Comparison
net/server_epoll.lua @ 7658:e14a124c4d73
net.server_epoll: Make minimum poll wait time configurable
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 04 Sep 2016 17:17:22 +0200 |
parent | 7657:252823632401 |
child | 7687:ae24deae6488 |
comparison
equal
deleted
inserted
replaced
7657:252823632401 | 7658:e14a124c4d73 |
---|---|
33 accept_retry_interval = 10; | 33 accept_retry_interval = 10; |
34 read_retry_delay = 1e-06; | 34 read_retry_delay = 1e-06; |
35 connect_timeout = 20; | 35 connect_timeout = 20; |
36 handshake_timeout = 60; | 36 handshake_timeout = 60; |
37 max_wait = 86400; | 37 max_wait = 86400; |
38 min_wait = 1e-06; | |
38 }}; | 39 }}; |
39 local cfg = default_config.__index; | 40 local cfg = default_config.__index; |
40 | 41 |
41 local fds = createtable(10, 0); -- FD -> conn | 42 local fds = createtable(10, 0); -- FD -> conn |
42 | 43 |
66 return at(gettime() + timeout, f); | 67 return at(gettime() + timeout, f); |
67 end | 68 end |
68 | 69 |
69 -- Run callbacks of expired timers | 70 -- Run callbacks of expired timers |
70 -- Return time until next timeout | 71 -- Return time until next timeout |
71 local function runtimers(next_delay) | 72 local function runtimers(next_delay, min_wait) |
72 -- Any timers at all? | 73 -- Any timers at all? |
73 if not timers[1] then | 74 if not timers[1] then |
74 return next_delay; | 75 return next_delay; |
75 end | 76 end |
76 | 77 |
102 resort_timers = true; | 103 resort_timers = true; |
103 else | 104 else |
104 t_remove(timers, i); | 105 t_remove(timers, i); |
105 end | 106 end |
106 end | 107 end |
107 if resort_timers or next_delay < 1e-6 then | 108 |
109 if resort_timers or next_delay < min_wait then | |
108 -- Timers may be added from within a timer callback. | 110 -- Timers may be added from within a timer callback. |
109 -- Those would not be considered for next_delay, | 111 -- Those would not be considered for next_delay, |
110 -- and we might sleep for too long, so instead | 112 -- and we might sleep for too long, so instead |
111 -- we return a shorter timeout so we can | 113 -- we return a shorter timeout so we can |
112 -- properly sort all new timers. | 114 -- properly sort all new timers. |
113 next_delay = 1e-6; | 115 next_delay = min_wait; |
114 end | 116 end |
117 | |
115 return next_delay; | 118 return next_delay; |
116 end | 119 end |
117 | 120 |
118 -- Socket handler interface | 121 -- Socket handler interface |
119 | 122 |
600 end | 603 end |
601 | 604 |
602 -- Main loop | 605 -- Main loop |
603 local function loop() | 606 local function loop() |
604 repeat | 607 repeat |
605 local t = runtimers(cfg.max_wait); | 608 local t = runtimers(cfg.max_wait, cfg.min_wait); |
606 local fd, r, w = epoll.wait(t); | 609 local fd, r, w = epoll.wait(t); |
607 if fd then | 610 if fd then |
608 local conn = fds[fd]; | 611 local conn = fds[fd]; |
609 if conn then | 612 if conn then |
610 if r then | 613 if r then |