X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=accesslog.cpp;h=03aeec8a51fb284884410418c1c9eef901cfd725;hp=81eff90e46b98312781364737d91d7e78c401ac4;hb=71fc5575037bead8b6e927a1fffd199e4fc4514b;hpb=3fd8650ccf3da3960a946d8ac9abc305aec399ce diff --git a/accesslog.cpp b/accesslog.cpp index 81eff90..03aeec8 100644 --- a/accesslog.cpp +++ b/accesslog.cpp @@ -43,7 +43,7 @@ void AccessLogThread::do_work() } } - while (!should_stop()) { + while (!should_stop) { // Empty the queue. vector writes; { @@ -66,10 +66,26 @@ void AccessLogThread::do_work() } 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) {