diff options
| author | Alan Somers <asomers@FreeBSD.org> | 2013-07-01 21:33:05 +0000 |
|---|---|---|
| committer | Alan Somers <asomers@FreeBSD.org> | 2013-07-01 21:33:05 +0000 |
| commit | be685e0128fc3b2e97306f65bcd3039baebfb091 (patch) | |
| tree | a2732c07be9e61daa361ef399fedf6234ab85ac7 /sbin/devd/devd.cc | |
| parent | 6d1014a32b4a435031c08921fb6ac5435229f88a (diff) | |
Notes
Diffstat (limited to 'sbin/devd/devd.cc')
| -rw-r--r-- | sbin/devd/devd.cc | 19 |
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); } |
