Hello, diff below seems to make empty log message go way. we have to check if sig_alrm fired here in pflogd:
725 while (1) { 726 np = pcap_dispatch(hpcap, PCAP_NUM_PKTS, 727 phandler, (u_char *)dpcap); 728 if (np < 0) { 729 if (!if_exists(interface)) { 730 logmsg(LOG_NOTICE, "interface %s went away", 731 interface); 732 ret = -1; 733 break; 734 } if alarm fires it interrupts pcap_read() called by pcap_dispatch() we enter at line 726: 75 again: 76 /* 77 * Has "pcap_breakloop()" been called? 78 */ 79 if (p->break_loop) { 80 /* 81 * Yes - clear the flag that indicates that it 82 * has, and return PCAP_ERROR_BREAK to indicate 83 * that we were told to break out of the loop. 84 */ 85 p->break_loop = 0; 86 return (PCAP_ERROR_BREAK); 87 } 88 89 cc = p->cc; 90 if (p->cc == 0) { 91 cc = read(p->fd, (char *)p->buffer, p->bufsize); 92 if (cc == -1) { 93 /* Don't choke when we get ptraced */ 94 switch (errno) { 95 96 case EINTR: 97 goto again; 98 I believe read at line 92 returns with EINTER, so we jump to line to 75. If ALARM fires the condition at line 79 is true, because pflogd's alarm handlers calls pcap_breakloop(): 174 void 175 sig_alrm(int sig) 176 { 177 pcap_breakloop(hpcap); 178 gotsig_alrm = 1; 179 } this makes me thinking the one-liner below is the fix we want. regards sashan --------8<---------------8<---------------8<------------------8<-------- diff --git a/sbin/pflogd/pflogd.c b/sbin/pflogd/pflogd.c index 271e46326ee..42ca066b7e7 100644 --- a/sbin/pflogd/pflogd.c +++ b/sbin/pflogd/pflogd.c @@ -732,7 +732,8 @@ main(int argc, char **argv) ret = -1; break; } - logmsg(LOG_NOTICE, "%s", pcap_geterr(hpcap)); + if (gotsig_alrm == 0) + logmsg(LOG_NOTICE, "%s", pcap_geterr(hpcap)); } if (gotsig_close)