httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeff Trawick <traw...@attglobal.net>
Subject [PATCH] -DNO_DETACH and/or apr_proc_detach() confusion?
Date Mon, 01 Apr 2002 21:53:29 GMT
This gets -DNO_DETACH working for me with Apache's prefork MPM on
Linux and FreeBSD.  But from Aaron's commit log for revision
1.34 I gather that this will break daemontools-like programs.

How should I get "./httpd -DNO_DETACH" to work?  Calling setsid() is
bogus.

This patch avoids the setsid() logic if we don't daemonize.

Index: srclib/apr/threadproc/unix/procsup.c
===================================================================
RCS file: /home/cvspublic/apr/threadproc/unix/procsup.c,v
retrieving revision 1.35
diff -u -r1.35 procsup.c
--- srclib/apr/threadproc/unix/procsup.c	13 Mar 2002 20:39:30 -0000	1.35
+++ srclib/apr/threadproc/unix/procsup.c	1 Apr 2002 21:49:20 -0000
@@ -57,42 +57,34 @@
 APR_DECLARE(apr_status_t) apr_proc_detach(int daemonize)
 {
     int x;
-    pid_t pgrp;
 
     chdir("/");
 #if !defined(MPE) && !defined(OS2) && !defined(TPF) && !defined(BEOS)
     /* Don't detach for MPE because child processes can't survive the death of
      * the parent. */
     if (daemonize) {
-	    if ((x = fork()) > 0) {
-	        exit(0);
+        if ((x = fork()) > 0) {
+            exit(0);
         }
-	    else if (x == -1) {
-	        perror("fork");
-	        fprintf(stderr, "unable to fork new process\n");
-	        exit(1);  /* we can't do anything here, so just exit. */
-	    }
-	    /* RAISE_SIGSTOP(DETACH); */
-    }
-#endif
-
+        else if (x == -1) {
+            perror("fork");
+            fprintf(stderr, "unable to fork new process\n");
+            exit(1);  /* we can't do anything here, so just exit. */
+        }
+        /* RAISE_SIGSTOP(DETACH); */
 #ifdef HAVE_SETSID
-    if ((pgrp = setsid()) == -1) {
-        return errno;
-    }
+        if (setsid() == -1) {
+            return errno;
+        }
 #elif defined(NEXT) || defined(NEWSOS)
-    if (setpgrp(0, getpid()) == -1 || (pgrp = getpgrp(0)) == -1) {
-        return errno;
-    }
-#elif defined(OS2) || defined(TPF)
-    /* OS/2 don't support process group IDs */
-    pgrp = getpid();
-#elif defined(MPE)
-    /* MPE uses negative pid for process group */
-    pgrp = -getpid();
+        if (setpgrp(0, getpid()) == -1) {
+            return errno;
+        }
 #else
-    if ((pgrp = setpgid(0, 0)) == -1) {
-        return errno;
+        if (setpgid(0, 0) == -1) {
+            return errno;
+        }
+#endif
     }
 #endif
 

-- 
Jeff Trawick | trawick@attglobal.net
Born in Roswell... married an alien...

Mime
View raw message