Callout/hold: ensure TLS-proxy process is not waited for as a transport process
[exim.git] / src / src / deliver.c
index 351a02b0ad7b7cff767a7cc3e02c3a4e9b59e209..139ee837424c76d644a42e0089a976aa65a9cf57 100644 (file)
@@ -8469,12 +8469,15 @@ if (cutthrough.fd >= 0 && cutthrough.callout_hold_only)
     if ((pid = fork()) < 0)
       goto fail;
 
-    else if (pid == 0)         /* child */
+    else if (pid == 0)         /* child: fork again to totally dosconnect */
       {
+      if ((pid = fork()))
+       _exit(pid ? EXIT_FAILURE : EXIT_SUCCESS);
       smtp_proxy_tls(big_buffer, big_buffer_size, pfd[0], 5*60);
       exim_exit(0);
       }
 
+    waitpid(pid, NULL, 0);
     (void) close(channel_fd);  /* release the client socket */
     channel_fd = pfd[1];
     }