}
}
- while (!should_stop()) {
+ while (!should_stop) {
// Empty the queue.
vector<ClientStats> writes;
{
}
fflush(logfp);
}
+
+ // Wait until the stop_fd pipe is closed, one second has passed.
+ // or a spurious signal arrives.
+ pollfd pfd;
+ pfd.fd = stop_fd_read;
+ pfd.events = POLLIN | POLLRDHUP;
- // Wait until we are being woken up, either to quit or because
- // there is material in pending_writes.
- wait_for_wakeup(NULL);
+ int nfds = poll(&pfd, 1, 1000);
+ if (nfds == 0 || (nfds == -1 && errno == EINTR)) {
+ continue;
+ }
+ if (nfds == 1) {
+ // Should stop.
+ break;
+ }
+ if (nfds == -1) {
+ log_perror("poll");
+ usleep(100000);
+ continue;
+ }
}
if (logfp != NULL) {