Callout/hold: ensure TLS-proxy process is not waited for as a transport process
[exim.git] / src / src / transports / smtp.c
index 4ce839d63631e42b60089992438df343d7d9b9e5..14eb76921edf43e175dbdd526012c06a50e8dcbd 100644 (file)
@@ -3425,14 +3425,17 @@ propagate it from the initial
          int pid = fork();
          if (pid > 0)          /* parent */
            {
+           waitpid(pid, NULL, 0);
            tls_close(FALSE, FALSE);
            (void)close(sx.inblock.sock);
            continue_transport = NULL;
            continue_hostname = NULL;
            return yield;
            }
-         else if (pid == 0)    /* child */
+         else if (pid == 0)    /* child; fork again to disconnect totally */
            {
+           if ((pid = fork()))
+             _exit(pid ? EXIT_FAILURE : EXIT_SUCCESS);
            smtp_proxy_tls(sx.buffer, sizeof(sx.buffer), pfd[0], sx.ob->command_timeout);
            exim_exit(0);
            }