X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=accesslog.cpp;h=9cd5be0ad7735cc30fe8769adada8d3509f8a079;hp=03aeec8a51fb284884410418c1c9eef901cfd725;hb=74cd48ffef90d7d0752e37a4515e4ecfb68f7c9d;hpb=71fc5575037bead8b6e927a1fffd199e4fc4514b diff --git a/accesslog.cpp b/accesslog.cpp index 03aeec8..9cd5be0 100644 --- a/accesslog.cpp +++ b/accesslog.cpp @@ -1,9 +1,6 @@ -#include -#include #include #include #include -#include #include #include @@ -26,8 +23,11 @@ AccessLogThread::AccessLogThread(const string &filename) void AccessLogThread::write(const ClientStats& client) { - MutexLock lock(&mutex); - pending_writes.push_back(client); + { + MutexLock lock(&mutex); + pending_writes.push_back(client); + } + wakeup(); } void AccessLogThread::do_work() @@ -43,7 +43,7 @@ void AccessLogThread::do_work() } } - while (!should_stop) { + while (!should_stop()) { // Empty the queue. vector writes; { @@ -58,7 +58,7 @@ void AccessLogThread::do_work() fprintf(logfp, "%llu %s %s %d %llu %llu %llu\n", (long long unsigned)(writes[i].connect_time), writes[i].remote_addr.c_str(), - writes[i].stream_id.c_str(), + writes[i].url.c_str(), int(now - writes[i].connect_time), (long long unsigned)(writes[i].bytes_sent), (long long unsigned)(writes[i].bytes_lost), @@ -66,26 +66,10 @@ 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; - 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; - } + // Wait until we are being woken up, either to quit or because + // there is material in pending_writes. + wait_for_wakeup(NULL); } if (logfp != NULL) {