Module: check_mk
Branch: master
Commit: 5845fa71c240861649cca37f34ae367acf3fb5ef
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=5845fa71c24086…
Author: Sven Panne <sp(a)mathias-kettner.de>
Date: Tue Jul 11 10:39:03 2017 +0200
Encapsulate select() calls, part 3
Use C++'s standard std::chrono facilities instead of fiddling around with
the low-level timeval struct. This is a mostly mechanic change, with the
exception of icmpsender's main_loop: This relied on select() modifying the
timeout, so we had to measure the duration for ourselves. This way we can
keep Poller::poll()'s interface simple, and main_loop() needs some massaging
in the future, anyway.
Note that we can reduce our dependency on ChronoUtils.h quite a bit now,
which is a nice side-effect of this change.
Change-Id: I7ca388dd8cef4507d1f18df6a858bd84cbaaa790
---
livestatus/src/InputBuffer.cc | 4 +---
livestatus/src/OutputBuffer.cc | 4 +---
livestatus/src/Poller.h | 7 +++++--
livestatus/src/module.cc | 7 +++----
livestatus/src/unixcat.cc | 8 ++++----
5 files changed, 14 insertions(+), 16 deletions(-)
diff --git a/livestatus/src/InputBuffer.cc b/livestatus/src/InputBuffer.cc
index 1bfd98b..4134ba1 100644
--- a/livestatus/src/InputBuffer.cc
+++ b/livestatus/src/InputBuffer.cc
@@ -29,7 +29,6 @@
#include <cstring>
#include <ostream>
#include <ratio>
-#include "ChronoUtils.h"
#include "Logger.h"
#include "Poller.h"
@@ -211,8 +210,7 @@ InputBuffer::Result InputBuffer::readData() {
FD_ZERO(&fds);
FD_SET(_fd, &fds);
- timeval tv = to_timeval(milliseconds(200));
- int retval = poller.poll(_fd + 1, &fds, nullptr, &tv);
+ int retval = poller.poll(_fd + 1, &fds, nullptr, milliseconds(200));
if (retval > 0 && FD_ISSET(_fd, &fds)) {
ssize_t r = read(_fd, &_readahead_buffer[_write_index],
_readahead_buffer.capacity() - _write_index);
diff --git a/livestatus/src/OutputBuffer.cc b/livestatus/src/OutputBuffer.cc
index bf54168..5189729 100644
--- a/livestatus/src/OutputBuffer.cc
+++ b/livestatus/src/OutputBuffer.cc
@@ -29,7 +29,6 @@
#include <cstddef>
#include <iomanip>
#include <ratio>
-#include "ChronoUtils.h"
#include "Logger.h"
#include "Poller.h"
@@ -84,8 +83,7 @@ void OutputBuffer::writeData(ostringstream &os) {
FD_ZERO(&fds);
FD_SET(_fd, &fds);
- timeval tv = to_timeval(milliseconds(100));
- int retval = poller.poll(_fd + 1, nullptr, &fds, &tv);
+ int retval = poller.poll(_fd + 1, nullptr, &fds, milliseconds(100));
if (retval > 0 && FD_ISSET(_fd, &fds)) {
ssize_t bytes_written = write(_fd, buffer, bytes_to_write);
if (bytes_written == -1) {
diff --git a/livestatus/src/Poller.h b/livestatus/src/Poller.h
index 7a71451..e4328c2 100644
--- a/livestatus/src/Poller.h
+++ b/livestatus/src/Poller.h
@@ -27,14 +27,17 @@
#include "config.h" // IWYU pragma: keep
#include <sys/select.h>
+#include "ChronoUtils.h"
class Poller {
public:
Poller() {}
+ template <typename Rep, typename Period>
int poll(int nfds, fd_set *readfds, fd_set *writefds,
- struct timeval *timeout) {
- return select(nfds, readfds, writefds, nullptr, timeout);
+ std::chrono::duration<Rep, Period> timeout) {
+ timeval tv = to_timeval(timeout);
+ return select(nfds, readfds, writefds, nullptr, &tv);
}
};
diff --git a/livestatus/src/module.cc b/livestatus/src/module.cc
index 05980f7..3632e52 100644
--- a/livestatus/src/module.cc
+++ b/livestatus/src/module.cc
@@ -43,6 +43,7 @@
#include <ctime>
#include <memory>
#include <ostream>
+#include <ratio>
#include <string>
#include <unordered_map>
#include <utility>
@@ -199,15 +200,13 @@ void *main_thread(void *data) {
tl_info = static_cast<ThreadInfo *>(data);
while (!fl_should_terminate) {
do_statistics();
- struct timeval tv;
- tv.tv_sec = 2;
- tv.tv_usec = 500 * 1000;
Poller poller;
fd_set fds;
FD_ZERO(&fds);
FD_SET(g_unix_socket, &fds);
- int retval = poller.poll(g_unix_socket + 1, &fds, nullptr, &tv);
+ int retval =
+ poller.poll(g_unix_socket + 1, &fds, nullptr, milliseconds(2500));
if (retval > 0 && FD_ISSET(g_unix_socket, &fds)) {
int cc = accept(g_unix_socket, nullptr, nullptr);
if (cc > g_max_fd_ever) {
diff --git a/livestatus/src/unixcat.cc b/livestatus/src/unixcat.cc
index 2b4362b..529e013 100644
--- a/livestatus/src/unixcat.cc
+++ b/livestatus/src/unixcat.cc
@@ -29,14 +29,17 @@
#include <sys/un.h>
#include <unistd.h>
#include <cerrno>
+#include <chrono>
#include <csignal>
#include <cstdlib>
#include <cstring>
#include <iostream>
+#include <ratio>
#include <string>
#include "Poller.h"
using std::cerr;
+using std::chrono::microseconds;
using std::endl;
using std::string;
using std::to_string;
@@ -60,10 +63,7 @@ ssize_t read_with_timeout(int from, char *buffer, int size, int us) {
fd_set fds;
FD_ZERO(&fds);
FD_SET(from, &fds);
- struct timeval tv;
- tv.tv_sec = us / 1000000;
- tv.tv_usec = us % 1000000;
- int retval = poller.poll(from + 1, &fds, nullptr, &tv);
+ int retval = poller.poll(from + 1, &fds, nullptr, microseconds(us));
if (retval > 0) {
return read(from, buffer, size);
}