From ac1ae1504aee457d87f82dbf667b995a1fa6a4ac Mon Sep 17 00:00:00 2001 From: asomers Date: Mon, 1 Jul 2013 21:33:05 +0000 Subject: [PATCH] Add a SIGINFO handler to devd. It will send useful statistics to syslog or stderr as appropriate. Currently, the only statistic printed is the number of events received. Reviewed by: eadler Approved by: gibbs (co-mentor) --- sbin/devd/devd.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/sbin/devd/devd.cc b/sbin/devd/devd.cc index 367349369c1..35dbae62082 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 " @@ -1090,6 +1098,16 @@ gensighand(int) romeo_must_die = 1; } +/* + * 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); } -- 2.45.0