Stefan Schuermans commited on 2018-09-02 10:43:07
Showing 2 changed files, with 11 additions and 2 deletions.
... | ... |
@@ -21,6 +21,8 @@ namespace Blinker { |
21 | 21 |
*/ |
22 | 22 |
void Io::wait(Set &read, Set &write, const Time &timeout) |
23 | 23 |
{ |
24 |
+ static const Time maxTimeout(0.5); // maximum timeout for I/O wait |
|
25 |
+ |
|
24 | 26 |
// get maximum file descriptor, read set and write set |
25 | 27 |
int max = 0; |
26 | 28 |
fd_set fd_rd; |
... | ... |
@@ -40,10 +42,13 @@ void Io::wait(Set &read, Set &write, const Time &timeout) |
40 | 42 |
|
41 | 43 |
// get timeout |
42 | 44 |
struct timeval to; |
43 |
- if (timeout < Time::zero) // don't use negaitve timeout |
|
45 |
+ if (timeout < Time::zero) { // don't use negative timeout |
|
44 | 46 |
Time::zero.toTimeval(to); |
45 |
- else |
|
47 |
+ } else if (timeout > maxTimeout) { // stay responsive -> no more than max |
|
48 |
+ maxTimeout.toTimeval(to); |
|
49 |
+ } else { |
|
46 | 50 |
timeout.toTimeval(to); |
51 |
+ } |
|
47 | 52 |
|
48 | 53 |
// wait for I/O event |
49 | 54 |
fd_set fd_err; |
... | ... |
@@ -21,6 +21,8 @@ namespace Blinker { |
21 | 21 |
*/ |
22 | 22 |
void Io::wait(Set &read, Set &write, const Time &timeout) |
23 | 23 |
{ |
24 |
+ static const Time maxTimeout(0.5); // maximum timeout for I/O wait |
|
25 |
+ |
|
24 | 26 |
// get read set and write set, also count entries |
25 | 27 |
unsigned int rds = 0; |
26 | 28 |
fd_set fd_rd; |
... | ... |
@@ -54,6 +56,8 @@ void Io::wait(Set &read, Set &write, const Time &timeout) |
54 | 56 |
struct timeval to; |
55 | 57 |
if (timeout < Time::zero) { // don't use negative timeout |
56 | 58 |
Time::zero.toTimeval(to); |
59 |
+ } else if (timeout > maxTimeout) { // stay responsive -> no more than max |
|
60 |
+ maxTimeout.toTimeval(to); |
|
57 | 61 |
} else { |
58 | 62 |
timeout.toTimeval(to); |
59 | 63 |
} |
60 | 64 |