summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: b8f9530)
raw | patch | inline | side by side (parent: b8f9530)
author | Florian Forster <octo@collectd.org> | |
Fri, 26 Apr 2013 12:16:38 +0000 (14:16 +0200) | ||
committer | Florian Forster <octo@collectd.org> | |
Fri, 26 Apr 2013 12:16:40 +0000 (14:16 +0200) |
Otherwise we'd just have the CPU hogging behavior shifted from libpcap
to collectd …
Github: #308
to collectd …
Github: #308
src/dns.c | patch | blob | history |
diff --git a/src/dns.c b/src/dns.c
index aea41c438de44430d35236aec0ec7d9d9a9c4d7a..00fcff191e0ccf0177ec7bea309eb2964b331228 100644 (file)
--- a/src/dns.c
+++ b/src/dns.c
return (status);
} /* int dns_run_pcap_loop */
+static int dns_sleep_one_interval (void) /* {{{ */
+{
+ cdtime_t interval;
+ struct timespec ts = { 0, 0 };
+ int status = 0;
+
+ interval = plugin_get_interval ();
+ CDTIME_T_TO_TIMESPEC (interval, &ts);
+
+ while (42)
+ {
+ struct timespec rem = { 0, 0 };
+
+ status = nanosleep (&ts, &rem);
+ if (status == 0)
+ break;
+ else if ((errno == EINTR) || (errno == EAGAIN))
+ {
+ ts = rem;
+ continue;
+ }
+ else
+ break;
+ }
+
+ return (status);
+} /* }}} int dns_sleep_one_interval */
+
static void *dns_child_loop (__attribute__((unused)) void *dummy) /* {{{ */
{
- int status = PCAP_ERROR_IFACE_NOT_UP;
+ int status;
- while (status == PCAP_ERROR_IFACE_NOT_UP)
+ while (42)
+ {
status = dns_run_pcap_loop ();
+ if (status != PCAP_ERROR_IFACE_NOT_UP)
+ break;
+
+ dns_sleep_one_interval ();
+ }
+
if (status != PCAP_ERROR_BREAK)
ERROR ("dns plugin: PCAP returned error %s.",
pcap_statustostr (status));