X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=stats.cpp;h=b2bca75970f800a6cf3f21517e243e3aed89cacd;hp=280f019edd9b2811d551cf018e62334cf00413bc;hb=71fc5575037bead8b6e927a1fffd199e4fc4514b;hpb=ba03a3ed19cc8b02d4bb198edfd1c8bee9f28e35 diff --git a/stats.cpp b/stats.cpp index 280f019..b2bca75 100644 --- a/stats.cpp +++ b/stats.cpp @@ -13,7 +13,6 @@ #include "log.h" #include "serverpool.h" #include "stats.h" -#include "util.h" using namespace std; @@ -27,7 +26,7 @@ StatsThread::StatsThread(const std::string &stats_file, int stats_interval) void StatsThread::do_work() { - while (!should_stop()) { + while (!should_stop) { int fd; FILE *fp; time_t now; @@ -45,7 +44,9 @@ void StatsThread::do_work() fp = fdopen(fd, "w"); if (fp == NULL) { log_perror("fdopen"); - safe_close(fd); + if (close(fd) == -1) { + log_perror("close"); + } if (unlink(filename) == -1) { log_perror(filename); } @@ -84,12 +85,25 @@ void StatsThread::do_work() free(filename); sleep: - // Wait until we are asked to quit, stats_interval timeout, + // Wait until the stop_fd pipe is closed, stats_interval timeout, // or a spurious signal. (The latter will cause us to write stats // too often, but that's okay.) - timespec timeout_ts; - timeout_ts.tv_sec = stats_interval; - timeout_ts.tv_nsec = 0; - wait_for_wakeup(&timeout_ts); + pollfd pfd; + pfd.fd = stop_fd_read; + pfd.events = POLLIN | POLLRDHUP; + + int nfds = poll(&pfd, 1, stats_interval * 1000); + if (nfds == 0 || (nfds == -1 && errno == EINTR)) { + continue; + } + if (nfds == 1) { + // Should stop. + break; + } + if (nfds == -1) { + log_perror("poll"); + usleep(100000); + continue; + } } }