From b83b299141ccbe2b60cf49a766a540c43f32167c Mon Sep 17 00:00:00 2001 From: Marco d'Itri Date: Sun, 27 Aug 2006 02:53:16 +0200 Subject: 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. --- udev_utils_run.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'udev_utils_run.c') diff --git a/udev_utils_run.c b/udev_utils_run.c index 76a704c52c..2771861cf5 100644 --- a/udev_utils_run.c +++ b/udev_utils_run.c @@ -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 */ -- cgit v1.2.3-54-g00ecf