X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/da47dd4d092ba35e4f8ff055d79693cc1266c816..8f2cf8f5adaa08ef84b47bf9bc2f71e39236c22d:/src/src/child.c diff --git a/src/src/child.c b/src/src/child.c index 1407b3718..07115bee4 100644 --- a/src/src/child.c +++ b/src/src/child.c @@ -3,7 +3,7 @@ *************************************************/ /* Copyright (c) University of Cambridge 1995 - 2015 */ -/* Copyright (c) The Exim Maintainers 2020 */ +/* Copyright (c) The Exim Maintainers 2020 - 2021 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -76,7 +76,7 @@ int n = 0; int extra = pcount ? *pcount : 0; uschar **argv; -argv = store_get((extra + acount + MAX_CLMACROS + 21) * sizeof(char *), FALSE); +argv = store_get((extra + acount + MAX_CLMACROS + 24) * sizeof(char *), FALSE); /* In all case, the list starts out with the path, any macros, and a changed config file. */ @@ -88,10 +88,7 @@ if (clmacro_count > 0) n += clmacro_count; } if (f.config_changed) - { - argv[n++] = US"-C"; - argv[n++] = config_main_filename; - } + { argv[n++] = US"-C"; argv[n++] = config_main_filename; } /* These values are added only for non-minimal cases. If debug_selector is precisely D_v, we have to assume this was started by a non-admin user, and @@ -108,24 +105,35 @@ if (!minimal) else { if (debug_selector != 0) + { argv[n++] = string_sprintf("-d=0x%x", debug_selector); + if (debug_fd > 2) + { + int flags = fcntl(debug_fd, F_GETFD); + if (flags != -1) (void)fcntl(debug_fd, F_SETFD, flags & ~FD_CLOEXEC); + close(2); + dup2(debug_fd, 2); + close(debug_fd); + } + } } + if (debug_pretrigger_buf) + { argv[n++] = US"-dp"; argv[n++] = string_sprintf("0x%x", debug_pretrigger_bsize); } + if (dtrigger_selector != 0) + argv[n++] = string_sprintf("-dt=0x%x", dtrigger_selector); DEBUG(D_any) { argv[n++] = US"-MCd"; argv[n++] = US process_purpose; } - if (!f.testsuite_delays) argv[n++] = US"-odd"; - if (f.dont_deliver) argv[n++] = US"-N"; - if (f.queue_smtp) argv[n++] = US"-odqs"; - if (f.synchronous_delivery) argv[n++] = US"-odi"; + if (!f.testsuite_delays) argv[n++] = US"-odd"; + if (f.dont_deliver) argv[n++] = US"-N"; + if (f.queue_smtp) argv[n++] = US"-odqs"; + if (f.synchronous_delivery) argv[n++] = US"-odi"; if (connection_max_messages >= 0) argv[n++] = string_sprintf("-oB%d", connection_max_messages); if (*queue_name) - { - argv[n++] = US"-MCG"; - argv[n++] = queue_name; - } + { argv[n++] = US"-MCG"; argv[n++] = queue_name; } } /* Now add in any others that are in the call. Remember which they were, @@ -269,6 +277,8 @@ if (pid == 0) } } +testharness_pause_ms(100); /* let child work even longer, for exec */ + /* Parent process. Save fork() errno and close the reading end of the stdin pipe. */