commit a693e9384f80e6e9a847bbbe4443fbdfa253e4dd from: Omar Polo date: Thu Feb 22 19:26:09 2024 UTC ev: switch to poll(2) ppoll(2) may not be available and we don't really need sub-millisecond precision. commit - e4bf5d183c7a3463495e8a5ff5cd890b41733b68 commit + a693e9384f80e6e9a847bbbe4443fbdfa253e4dd blob - cfe557178e73374aed6b61e63f62cb4cfa113824 blob + d03a685f56550990d17251c2c64d53b1bed21825 --- ev.c +++ ev.c @@ -423,9 +423,9 @@ poll2ev(int ev) int ev_loop(void) { - struct timespec elapsed, beg, end, min, *wait; - struct timeval tv, sub; - int n; + struct timespec elapsed, beg, end; + struct timeval tv, sub, *min; + int n, msec; size_t i; while (!ev_stop) { @@ -433,27 +433,26 @@ ev_loop(void) base->reserve_from = base->ntimers; base->reserve_till = base->ntimers; - wait = NULL; + msec = -1; if (base->ntimers) { - TIMEVAL_TO_TIMESPEC(&base->timers[0].tv, &min); - wait = &min; + min = &base->timers[0].tv; + msec = min->tv_sec * 1000 + (min->tv_usec + 999) / 1000; } clock_gettime(CLOCK_MONOTONIC, &beg); - if ((n = ppoll(base->pfds, base->len, wait, NULL)) == -1) { + if ((n = poll(base->pfds, base->len, msec)) == -1) { if (errno != EINTR) return -1; } if (n == 0) - memcpy(&elapsed, &min, sizeof(min)); + memcpy(&tv, min, sizeof(tv)); else { clock_gettime(CLOCK_MONOTONIC, &end); timespecsub(&end, &beg, &elapsed); + TIMESPEC_TO_TIMEVAL(&tv, &elapsed); } - TIMESPEC_TO_TIMEVAL(&tv, &elapsed); - for (i = 0; i < base->ntimers && !ev_stop; /* nop */) { timersub(&base->timers[i].tv, &tv, &sub); if (sub.tv_sec <= 0) {