]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
fix: Monitor doesn't return after starting daemon
authorAnna Czarnowska <anna.czarnowska@intel.com>
Wed, 15 Dec 2010 04:51:53 +0000 (15:51 +1100)
committerNeilBrown <neilb@suse.de>
Wed, 15 Dec 2010 04:51:53 +0000 (15:51 +1100)
Signed-off-by: Anna Czarnowska <anna.czarnowska@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Monitor.c

index af701939d12a1794201607886edbaa59dca05e00..ce160f3e3fb448839463297a450ce2d65f282ef7 100644 (file)
--- a/Monitor.c
+++ b/Monitor.c
@@ -152,9 +152,11 @@ int Monitor(struct mddev_dev *devlist,
        info.mailfrom = mailfrom;
        info.dosyslog = dosyslog;
 
-       if (daemonise)
-               if (make_daemon(pidfile))
-                       return 1;
+       if (daemonise) {
+               int rv = make_daemon(pidfile);
+               if (rv >= 0)
+                       return rv;
+       }
 
        if (share) 
                if (check_one_sharer(scan))
@@ -247,6 +249,12 @@ int Monitor(struct mddev_dev *devlist,
 
 static int make_daemon(char *pidfile)
 {
+       /* Return:
+        * -1 in the forked daemon
+        *  0 in the parent
+        *  1 on error
+        * so a none-negative becomes the exit code.
+        */
        int pid = fork();
        if (pid > 0) {
                if (!pidfile)
@@ -272,7 +280,7 @@ static int make_daemon(char *pidfile)
        dup2(0,1);
        dup2(0,2);
        setsid();
-       return 0;
+       return -1;
 }
 
 static int check_one_sharer(int scan)