… | |
… | |
627 | |
627 | |
628 | tv.tv_sec = (time_t)delay; |
628 | tv.tv_sec = (time_t)delay; |
629 | tv.tv_usec = (long)((delay - (ev_tstamp)(tv.tv_sec)) * 1e6); |
629 | tv.tv_usec = (long)((delay - (ev_tstamp)(tv.tv_sec)) * 1e6); |
630 | |
630 | |
631 | /* here we rely on sys/time.h + sys/types.h + unistd.h providing select */ |
631 | /* here we rely on sys/time.h + sys/types.h + unistd.h providing select */ |
632 | /* somehting nto guaranteed by newer posix versions, but guaranteed */ |
632 | /* somehting not guaranteed by newer posix versions, but guaranteed */ |
633 | /* by older ones */ |
633 | /* by older ones */ |
634 | select (0, 0, 0, 0, &tv); |
634 | select (0, 0, 0, 0, &tv); |
635 | #endif |
635 | #endif |
636 | } |
636 | } |
637 | } |
637 | } |
… | |
… | |
2075 | ev_tstamp waittime = 0.; |
2075 | ev_tstamp waittime = 0.; |
2076 | ev_tstamp sleeptime = 0.; |
2076 | ev_tstamp sleeptime = 0.; |
2077 | |
2077 | |
2078 | if (expect_true (!(flags & EVLOOP_NONBLOCK || idleall || !activecnt))) |
2078 | if (expect_true (!(flags & EVLOOP_NONBLOCK || idleall || !activecnt))) |
2079 | { |
2079 | { |
|
|
2080 | /* remember old timestamp for io_blocktime calculation */ |
|
|
2081 | ev_tstamp prev_mn_now = mn_now; |
|
|
2082 | |
2080 | /* update time to cancel out callback processing overhead */ |
2083 | /* update time to cancel out callback processing overhead */ |
2081 | time_update (EV_A_ 1e100); |
2084 | time_update (EV_A_ 1e100); |
2082 | |
2085 | |
2083 | waittime = MAX_BLOCKTIME; |
2086 | waittime = MAX_BLOCKTIME; |
2084 | |
2087 | |
… | |
… | |
2094 | ev_tstamp to = ANHE_at (periodics [HEAP0]) - ev_rt_now + backend_fudge; |
2097 | ev_tstamp to = ANHE_at (periodics [HEAP0]) - ev_rt_now + backend_fudge; |
2095 | if (waittime > to) waittime = to; |
2098 | if (waittime > to) waittime = to; |
2096 | } |
2099 | } |
2097 | #endif |
2100 | #endif |
2098 | |
2101 | |
|
|
2102 | /* don't let timeouts decrease the waittime below timeout_blocktime */ |
2099 | if (expect_false (waittime < timeout_blocktime)) |
2103 | if (expect_false (waittime < timeout_blocktime)) |
2100 | waittime = timeout_blocktime; |
2104 | waittime = timeout_blocktime; |
2101 | |
2105 | |
2102 | sleeptime = waittime - backend_fudge; |
2106 | /* extra check because io_blocktime is commonly 0 */ |
2103 | |
|
|
2104 | if (expect_true (sleeptime > io_blocktime)) |
2107 | if (expect_false (io_blocktime)) |
2105 | sleeptime = io_blocktime; |
|
|
2106 | |
|
|
2107 | if (sleeptime) |
|
|
2108 | { |
2108 | { |
|
|
2109 | sleeptime = io_blocktime - (mn_now - prev_mn_now); |
|
|
2110 | |
|
|
2111 | if (sleeptime > waittime - backend_fudge) |
|
|
2112 | sleeptime = waittime - backend_fudge; |
|
|
2113 | |
|
|
2114 | if (expect_true (sleeptime > 0.)) |
|
|
2115 | { |
2109 | ev_sleep (sleeptime); |
2116 | ev_sleep (sleeptime); |
2110 | waittime -= sleeptime; |
2117 | waittime -= sleeptime; |
|
|
2118 | } |
2111 | } |
2119 | } |
2112 | } |
2120 | } |
2113 | |
2121 | |
2114 | ++loop_count; |
2122 | ++loop_count; |
2115 | backend_poll (EV_A_ waittime); |
2123 | backend_poll (EV_A_ waittime); |