1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-01-12 09:17:44 +03:00

run_program: close pipe fd's which are connected to child process

When udev_log="debug", the children of udev inherit the file
descriptors of the pipes used to capture output. If they are not
properly closed then udev will not exit until all programs started
in the background by the children are terminated or have closed the
fds themselves, and this may cause deadlocks with udevsettle.
This commit is contained in:
Marco d'Itri 2006-08-27 02:53:16 +02:00 committed by Kay Sievers
parent a1e6bd93d3
commit b83b299141

View File

@ -151,10 +151,14 @@ int run_program(const char *command, const char *subsystem,
close(devnull);
} else
err("open /dev/null failed: %s", strerror(errno));
if (outpipe[WRITE_END] > 0)
if (outpipe[WRITE_END] > 0) {
dup2(outpipe[WRITE_END], STDOUT_FILENO);
if (errpipe[WRITE_END] > 0)
close(outpipe[WRITE_END]);
}
if (errpipe[WRITE_END] > 0) {
dup2(errpipe[WRITE_END], STDERR_FILENO);
close(errpipe[WRITE_END]);
}
execv(argv[0], argv);
/* we should never reach this */