Revert "Rewrite the entire internal signal handling/wakeup."
[cubemap] / accesslog.cpp
index 81eff90..03aeec8 100644 (file)
@@ -43,7 +43,7 @@ void AccessLogThread::do_work()
                }
        }
 
-       while (!should_stop()) {
+       while (!should_stop) {
                // Empty the queue.
                vector<ClientStats> 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) {