summaryrefslogtreecommitdiffstats
path: root/usr.sbin/smtpd/ramqueue.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/smtpd/ramqueue.c')
-rw-r--r--usr.sbin/smtpd/ramqueue.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/usr.sbin/smtpd/ramqueue.c b/usr.sbin/smtpd/ramqueue.c
index 8d21afb75f3..929c9cd6ab6 100644
--- a/usr.sbin/smtpd/ramqueue.c
+++ b/usr.sbin/smtpd/ramqueue.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ramqueue.c,v 1.29 2012/01/12 22:00:21 gilles Exp $ */
+/* $OpenBSD: ramqueue.c,v 1.30 2012/01/12 22:40:16 gilles Exp $ */
/*
* Copyright (c) 2011 Gilles Chehade <gilles@openbsd.org>
@@ -133,7 +133,7 @@ ramqueue_load(struct ramqueue *rqueue, time_t *nsched)
while (qwalk(q, &evpid)) {
curtm = time(NULL);
if (! queue_envelope_load(Q_QUEUE, evpid, &envelope)) {
- log_debug("failed to load envelope");
+ log_debug("ramqueue: moved envelope to /corrupt");
queue_message_corrupt(Q_QUEUE, evpid_to_msgid(evpid));
continue;
}
@@ -141,10 +141,14 @@ ramqueue_load(struct ramqueue *rqueue, time_t *nsched)
continue;
ramqueue_insert(rqueue, &envelope, curtm);
- rq_evp = TAILQ_FIRST(&rqueue->queue);
- *nsched = rq_evp->sched;
+ rq_evp = ramqueue_next_envelope(rqueue);
+ if (rq_evp == NULL)
+ continue;
+
+ if (rq_evp->sched <= *nsched)
+ *nsched = rq_evp->sched;
- if (rq_evp->sched <= *nsched) {
+ if (*nsched <= curtm) {
log_debug("ramqueue: loading interrupted");
return (0);
}