summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordes <des@FreeBSD.org>2002-10-06 17:43:04 +0000
committerdes <des@FreeBSD.org>2002-10-06 17:43:04 +0000
commit643b06665fbd514e0b43fd523e05b09534553612 (patch)
tree434c1af9392dd445e8763237b4defbb27d462e6d
parent4960ffbcf1fd20f9a7fa0a850a14f340a136b0e9 (diff)
downloadFreeBSD-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
-rw-r--r--usr.sbin/syslogd/syslogd.c6
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. */
OpenPOWER on IntegriCloud