Author: guillem
Date: 2007-05-15 02:53:36 +0000 (Tue, 15 May 2007)
New Revision: 774

Modified:
   trunk/ChangeLog
   trunk/debian/changelog
   trunk/utils/start-stop-daemon.c
Log:
Make start-stop-daemon fork twice while daemonizing. Closes: #416179


Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog     2007-05-15 02:32:27 UTC (rev 773)
+++ trunk/ChangeLog     2007-05-15 02:53:36 UTC (rev 774)
@@ -1,5 +1,10 @@
 2007-05-15  Guillem Jover  <[EMAIL PROTECTED]>
 
+       * utils/start-stop-daemon.c (main): Move daemonizing code to ...
+       (daemonize): ... here. New function. Fork twice.
+
+2007-05-15  Guillem Jover  <[EMAIL PROTECTED]>
+
        * scripts/update-alternatives.pl: Call fill_missing_slavepaths at the
        end of the 'install' conditional.
        (fill_missing_slavepaths): New function.

Modified: trunk/debian/changelog
===================================================================
--- trunk/debian/changelog      2007-05-15 02:32:27 UTC (rev 773)
+++ trunk/debian/changelog      2007-05-15 02:53:36 UTC (rev 774)
@@ -19,6 +19,7 @@
     'Info dir file'. Closes: #420766
   * Document in deb-control.5 that the control file can have '#'-style
     comments. Closes: #406481
+  * Make start-stop-daemon fork twice while daemonizing. Closes: #416179
 
   [ Updated dpkg-dev translations ]
   * French (Frédéric Bothamy). Closes: #423392

Modified: trunk/utils/start-stop-daemon.c
===================================================================
--- trunk/utils/start-stop-daemon.c     2007-05-15 02:32:27 UTC (rev 773)
+++ trunk/utils/start-stop-daemon.c     2007-05-15 02:53:36 UTC (rev 774)
@@ -252,7 +252,37 @@
                fatal("gettimeofday failed: %s", strerror(errno));
 }
 
+static void
+daemonize(void)
+{
+       pid_t pid;
 
+       if (quietmode < 0)
+               printf("Detaching to start %s...", startas);
+
+       pid = fork();
+       if (pid < 0)
+               fatal("Unable to do first fork.\n");
+       else if (pid) /* Parent */
+               exit(0);
+
+       /* Create a new session */
+#ifdef HAVE_SETSID
+       setsid();
+#else
+       setpgid(0, 0);
+#endif
+
+       pid = fork();
+       if (pid < 0)
+               fatal("Unable to do second fork.\n");
+       else if (pid) /* Parent */
+               exit(0);
+
+       if (quietmode < 0)
+               printf("done.\n");
+}
+
 static void
 push(struct pid_list **list, pid_t pid)
 {
@@ -1307,19 +1337,7 @@
                printf("Starting %s...\n", startas);
        *--argv = startas;
        if (background) { /* ok, we need to detach this process */
-               int i;
-               if (quietmode < 0)
-                       printf("Detaching to start %s...", startas);
-               i = fork();
-               if (i<0) {
-                       fatal("Unable to fork.\n");
-               }
-               if (i) { /* parent */
-                       if (quietmode < 0)
-                               printf("done.\n");
-                       exit(0);
-               }
-                /* child continues here */
+               daemonize();
 
 #ifdef HAVE_TIOCNOTTY
                tty_fd=open("/dev/tty", O_RDWR);
@@ -1378,13 +1396,6 @@
                 /* now close all extra fds */
                for (i=getdtablesize()-1; i>=3; --i) close(i);
 #endif
-
-               /* create a new session */
-#ifdef HAVE_SETSID
-               setsid();
-#else
-               setpgid(0,0);
-#endif
        }
        execv(startas, argv);
        fatal("Unable to start %s: %s", startas, strerror(errno));


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to