setsid: check for setsid error directly

function                                             old     new   delta
setsid_main                                           74      66      -8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2010-05-16 02:12:56 +02:00
parent 084e2284c7
commit a29b055bf1

View File

@ -25,11 +25,24 @@ int setsid_main(int argc UNUSED_PARAM, char **argv)
/* setsid() is allowed only when we are not a process group leader.
* Otherwise our PID serves as PGID of some existing process group
* and cannot be used as PGID of a new process group. */
if (getpgrp() == getpid())
if (fork_or_rexec(argv))
exit(EXIT_SUCCESS); /* parent */
if (setsid() < 0) {
pid_t pid = fork_or_rexec(argv);
if (pid != 0) {
/* parent */
/* TODO:
* we can waitpid(pid, &status, 0) and then even
* emulate exitcode, making the behavior consistent
* in both forked and non forked cases.
* However, the code is larger and upstream
* does not do such trick.
*/
exit(EXIT_SUCCESS);
}
setsid(); /* no error possible */
/* child */
/* now there should be no error: */
setsid();
}
BB_EXECVP(argv[1], argv + 1);
bb_simple_perror_msg_and_die(argv[1]);