diff options
author | des <des@FreeBSD.org> | 2002-10-06 17:43:04 +0000 |
---|---|---|
committer | des <des@FreeBSD.org> | 2002-10-06 17:43:04 +0000 |
commit | 643b06665fbd514e0b43fd523e05b09534553612 (patch) | |
tree | 434c1af9392dd445e8763237b4defbb27d462e6d /usr.sbin | |
parent | 4960ffbcf1fd20f9a7fa0a850a14f340a136b0e9 (diff) | |
download | FreeBSD-src-643b06665fbd514e0b43fd523e05b09534553612.zip FreeBSD-src-643b06665fbd514e0b43fd523e05b09534553612.tar.gz |
Avoid referencing a removed (and freed) queue entry. This partially reverts
revision 1.101 (which did not introduce the bug but made it harder to fix)
PR: misc/40363
Submitted by: David Dunham <dwdunham@isilon.com>
MFC after: 2 weeks
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/syslogd/syslogd.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c index c3887ac..6afc3ee 100644 --- a/usr.sbin/syslogd/syslogd.c +++ b/usr.sbin/syslogd/syslogd.c @@ -1813,7 +1813,7 @@ static void markit(void) { struct filed *f; - dq_t q; + dq_t q, next; now = time((time_t *)NULL); MarkSeq += TIMERINTVL; @@ -1834,7 +1834,9 @@ markit(void) } /* Walk the dead queue, and see if we should signal somebody. */ - TAILQ_FOREACH(q, &deadq_head, dq_entries) { + for (q = TAILQ_FIRST(&deadq_head); q != NULL; q = next) { + next = TAILQ_NEXT(q, dq_entries); + switch (q->dq_timeout) { case 0: /* Already signalled once, try harder now. */ |