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]