git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Move the fast-ramp two phase queue run support from Experimental to the mainline
[exim.git]
/
src
/
src
/
queue.c
diff --git
a/src/src/queue.c
b/src/src/queue.c
index 303a780861a1574b0033e775a606a38243585dba..6748afd5d8c99e5eaa237ccf29f530faaf165edc 100644
(file)
--- a/
src/src/queue.c
+++ b/
src/src/queue.c
@@
-3,6
+3,7
@@
*************************************************/
/* Copyright (c) University of Cambridge 1995 - 2018 */
*************************************************/
/* Copyright (c) University of Cambridge 1995 - 2018 */
+/* Copyright (c) The Exim Maintainers 2020 */
/* See the file NOTICE for conditions of use and distribution. */
/* Functions that operate on the input queue. */
/* See the file NOTICE for conditions of use and distribution. */
/* Functions that operate on the input queue. */
@@
-125,8
+126,6
@@
int resetflags = -1;
int subptr;
queue_filename *yield = NULL;
queue_filename *last = NULL;
int subptr;
queue_filename *yield = NULL;
queue_filename *last = NULL;
-struct dirent *ent;
-DIR *dd;
uschar buffer[256];
queue_filename *root[LOG2_MAXNODES];
uschar buffer[256];
queue_filename *root[LOG2_MAXNODES];
@@
-171,6
+170,7
@@
for (; i <= *subcount; i++)
{
int count = 0;
int subdirchar = subdirs[i]; /* 0 for main directory */
{
int count = 0;
int subdirchar = subdirs[i]; /* 0 for main directory */
+ DIR *dd;
if (subdirchar != 0)
{
if (subdirchar != 0)
{
@@
-179,12
+179,12
@@
for (; i <= *subcount; i++)
}
DEBUG(D_queue_run) debug_printf("looking in %s\n", buffer);
}
DEBUG(D_queue_run) debug_printf("looking in %s\n", buffer);
- if (!(dd =
opendir(CS
buffer)))
+ if (!(dd =
exim_opendir(
buffer)))
continue;
/* Now scan the directory. */
continue;
/* Now scan the directory. */
-
while ((ent = readdir(dd))
)
+
for (struct dirent *ent; ent = readdir(dd);
)
{
uschar *name = US ent->d_name;
int len = Ustrlen(name);
{
uschar *name = US ent->d_name;
int len = Ustrlen(name);
@@
-496,10
+496,8
@@
for (int i = queue_run_in_order ? -1 : 0;
}
else
for (i = 0; qpid[i]; ) i++;
}
else
for (i = 0; qpid[i]; ) i++;
- DEBUG(D_queue_run) debug_printf("q2stage forking\n");
- if ((qpid[i] = fork()))
+ if ((qpid[i] = exim_fork(US"qrun-phase-one")))
continue; /* parent loops around */
continue; /* parent loops around */
- DEBUG(D_queue_run) debug_printf("q2stage child\n");
}
/* Skip this message unless it's within the ID limits */
}
/* Skip this message unless it's within the ID limits */
@@
-651,13
+649,13
@@
for (int i = queue_run_in_order ? -1 : 0;
#endif
single_item_retry:
#endif
single_item_retry:
- if ((pid =
fork(
)) == 0)
+ if ((pid =
exim_fork(US"qrun-delivery"
)) == 0)
{
int rc;
{
int rc;
- testharness_pause_ms(100);
(void)close(pfd[pipe_read]);
rc = deliver_message(fq->text, force_delivery, FALSE);
(void)close(pfd[pipe_read]);
rc = deliver_message(fq->text, force_delivery, FALSE);
- exim_underbar_exit(rc == DELIVER_NOT_ATTEMPTED, US"qrun-delivery");
+ exim_underbar_exit(rc == DELIVER_NOT_ATTEMPTED
+ ? EXIT_FAILURE : EXIT_SUCCESS);
}
if (pid < 0)
log_write(0, LOG_MAIN|LOG_PANIC_DIE, "fork of delivery process from "
}
if (pid < 0)
log_write(0, LOG_MAIN|LOG_PANIC_DIE, "fork of delivery process from "
@@
-709,7
+707,7
@@
single_item_retry:
/* If initial of a 2-phase run, we are a child - so just exit */
if (f.queue_2stage && !queue_run_in_order)
/* If initial of a 2-phase run, we are a child - so just exit */
if (f.queue_2stage && !queue_run_in_order)
- exim_exit(EXIT_SUCCESS
, US"2-phase child"
);
+ exim_exit(EXIT_SUCCESS);
/* If we are in the test harness, and this is not the first of a 2-stage
queue run, update fudged queue times. */
/* If we are in the test harness, and this is not the first of a 2-stage
queue run, update fudged queue times. */
@@
-726,7
+724,7
@@
single_item_retry:
go_around:
/* If initial of a 2-phase run, we are a child - so just exit */
if (f.queue_2stage && !queue_run_in_order)
go_around:
/* If initial of a 2-phase run, we are a child - so just exit */
if (f.queue_2stage && !queue_run_in_order)
- exim_exit(EXIT_SUCCESS
, US"2-phase child"
);
+ exim_exit(EXIT_SUCCESS);
} /* End loop for list of messages */
tree_nonrecipients = NULL;
} /* End loop for list of messages */
tree_nonrecipients = NULL;
@@
-1533,7
+1531,7
@@
if (s)
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
-#if
def EXPERIMENTAL
_QUEUE_RAMP
+#if
ndef DISABLE
_QUEUE_RAMP
void
queue_notify_daemon(const uschar * msgid)
{
void
queue_notify_daemon(const uschar * msgid)
{
@@
-1548,7
+1546,6
@@
memcpy(buf+1, msgid, MESSAGE_ID_LENGTH+1);
if ((fd = socket(AF_UNIX, SOCK_DGRAM, 0)) >= 0)
{
struct sockaddr_un sa_un = {.sun_family = AF_UNIX};
if ((fd = socket(AF_UNIX, SOCK_DGRAM, 0)) >= 0)
{
struct sockaddr_un sa_un = {.sun_family = AF_UNIX};
- int slen;
#ifdef EXIM_HAVE_ABSTRACT_UNIX_SOCKETS
int len = offsetof(struct sockaddr_un, sun_path) + 1
#ifdef EXIM_HAVE_ABSTRACT_UNIX_SOCKETS
int len = offsetof(struct sockaddr_un, sun_path) + 1