fix: Monitor doesn't return after starting daemon

Signed-off-by: Anna Czarnowska <anna.czarnowska@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Anna Czarnowska 2010-12-15 15:51:53 +11:00 committed by NeilBrown
parent 95d07a2cdd
commit 44d337f04d
1 changed files with 12 additions and 4 deletions

View File

@ -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)