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:
parent
a1e6bd93d3
commit
b83b299141
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user