core: fix return status pipe machinery in non-daemon mode

upstream fix: 33b4d925d42348fd7a6dfad94d1ada0118ea49be
vseva/dump_timers
Victor Seva 13 years ago
parent 770055e4a9
commit ed24eaef4c

@ -421,23 +421,23 @@ int main(int argc, char* argv[])
close(fd[1]);
/* parent process => wait for result from child*/
for(int i=0;i<2;i++){
INFO("waiting for child[%d] response\n", i);
DBG("waiting for child[%d] response\n", i);
read(fd[0], &pid, sizeof(int));
if(pid<0){
ERROR("Child [%d] return an error: %d\n", i, pid);
close(fd[0]);
goto error;
}
INFO("child [%d] pid:%d\n", i, pid);
DBG("child [%d] pid:%d\n", i, pid);
}
INFO("all childs return OK. bye world!\n");
DBG("all childs return OK. bye world!\n");
close(fd[0]);
return 0;
}else {
/* child */
close(fd[0]);
main_pid = getpid();
INFO("hi world! I'm child [%d]\n", main_pid);
DBG("hi world! I'm child [%d]\n", main_pid);
write(fd[1], &main_pid, sizeof(int));
}
/* become session leader to drop the ctrl. terminal */
@ -452,7 +452,7 @@ int main(int argc, char* argv[])
/*parent process => exit */
close(fd[1]);
main_pid = getpid();
INFO("I'm out. pid: %d", main_pid);
DBG("I'm out. pid: %d", main_pid);
return 0;
}
@ -518,9 +518,11 @@ int main(int argc, char* argv[])
sip_ctrl.load();
#ifndef DISABLE_DAEMON_MODE
INFO("hi world! I'm main child [%d]\n", main_pid);
write(fd[1], &main_pid, sizeof(int));
close(fd[1]);
if(fd[1]) {
DBG("hi world! I'm main child [%d]\n", main_pid);
write(fd[1], &main_pid, sizeof(int));
close(fd[1]); fd[1] = 0;
}
#endif
if(sip_ctrl.run() != -1)
@ -547,11 +549,11 @@ int main(int argc, char* argv[])
if (AmConfig::DaemonMode) {
unlink(AmConfig::DaemonPidFile.c_str());
}
if (!(fcntl(fd[1], F_GETFL) == -1 && errno == EBADF)){
main_pid = -1;
ERROR("send -1 to parent\n");
write(fd[1], &main_pid, sizeof(int));
close(fd[1]);
if(fd[1]){
main_pid = -1;
DBG("send -1 to parent\n");
write(fd[1], &main_pid, sizeof(int));
close(fd[1]);
}
#endif

Loading…
Cancel
Save