aboutsummaryrefslogtreecommitdiff
path: root/sbin/devd/devd.cc
diff options
context:
space:
mode:
authorAlan Somers <asomers@FreeBSD.org>2013-07-01 21:33:05 +0000
committerAlan Somers <asomers@FreeBSD.org>2013-07-01 21:33:05 +0000
commitbe685e0128fc3b2e97306f65bcd3039baebfb091 (patch)
treea2732c07be9e61daa361ef399fedf6234ab85ac7 /sbin/devd/devd.cc
parent6d1014a32b4a435031c08921fb6ac5435229f88a (diff)
Notes
Diffstat (limited to 'sbin/devd/devd.cc')
-rw-r--r--sbin/devd/devd.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/sbin/devd/devd.cc b/sbin/devd/devd.cc
index 367349369c1f9..35dbae620829a 100644
--- a/sbin/devd/devd.cc
+++ b/sbin/devd/devd.cc
@@ -117,6 +117,8 @@ static struct pidfh *pfh;
int dflag;
int nflag;
+static unsigned total_events = 0;
+static volatile sig_atomic_t got_siginfo = 0;
static volatile sig_atomic_t romeo_must_die = 0;
static const char *configfile = CF;
@@ -965,6 +967,11 @@ event_loop(void)
tv.tv_usec = 0;
}
rv = select(max_fd, &fds, NULL, NULL, &tv);
+ if (got_siginfo) {
+ devdlog(LOG_INFO, "Events received so far=%ld\n",
+ total_events);
+ got_siginfo = 0;
+ }
if (rv == -1) {
if (errno == EINTR)
continue;
@@ -974,6 +981,7 @@ event_loop(void)
if (FD_ISSET(fd, &fds)) {
rv = read(fd, buffer, sizeof(buffer) - 1);
if (rv > 0) {
+ total_events++;
if (rv == sizeof(buffer) - 1) {
devdlog(LOG_WARNING, "Warning: "
"available event data exceeded "
@@ -1091,6 +1099,16 @@ gensighand(int)
}
/*
+ * SIGINFO handler. Will print useful statistics to the syslog or stderr
+ * as appropriate
+ */
+static void
+siginfohand(int)
+{
+ got_siginfo = 1;
+}
+
+/*
* Local logging function. Prints to syslog if we're daemonized; syslog
* otherwise.
*/
@@ -1169,6 +1187,7 @@ main(int argc, char **argv)
signal(SIGHUP, gensighand);
signal(SIGINT, gensighand);
signal(SIGTERM, gensighand);
+ signal(SIGINFO, siginfohand);
event_loop();
return (0);
}