From 4e25b857f5d854089449e6c5115840ab35e9f2e9 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 22 Jun 2006 19:49:00 +0000 Subject: [PATCH] nuke fd leak on ecore_exe pipes! :) SVN revision: 23537 --- legacy/ecore/src/lib/ecore/ecore_exe.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/legacy/ecore/src/lib/ecore/ecore_exe.c b/legacy/ecore/src/lib/ecore/ecore_exe.c index a3a89d877e..1bf6b7892a 100644 --- a/legacy/ecore/src/lib/ecore/ecore_exe.c +++ b/legacy/ecore/src/lib/ecore/ecore_exe.c @@ -432,7 +432,13 @@ ecore_exe_pipe_run(const char *exe_cmd, Ecore_Exe_Flags flags, const void *data) { /* Setup the error stuff. */ E_IF_NO_ERRNO(result, fcntl(exe->child_fd_error, F_SETFL, - O_NONBLOCK), ok) + O_NONBLOCK), ok); + E_IF_NO_ERRNO(result, + fcntl(exe->child_fd_error, F_SETFD, + FD_CLOEXEC), ok); + E_IF_NO_ERRNO(result, + fcntl(exe->child_fd_error_x, F_SETFD, + FD_CLOEXEC), ok); { exe->error_fd_handler = ecore_main_fd_handler_add(exe->child_fd_error, @@ -447,7 +453,13 @@ ecore_exe_pipe_run(const char *exe_cmd, Ecore_Exe_Flags flags, const void *data) { /* Setup the read stuff. */ E_IF_NO_ERRNO(result, fcntl(exe->child_fd_read, F_SETFL, - O_NONBLOCK), ok) + O_NONBLOCK), ok); + E_IF_NO_ERRNO(result, + fcntl(exe->child_fd_read, F_SETFD, + FD_CLOEXEC), ok); + E_IF_NO_ERRNO(result, + fcntl(exe->child_fd_read_x, F_SETFD, + FD_CLOEXEC), ok); { exe->read_fd_handler = ecore_main_fd_handler_add(exe->child_fd_read, @@ -462,7 +474,13 @@ ecore_exe_pipe_run(const char *exe_cmd, Ecore_Exe_Flags flags, const void *data) { /* Setup the write stuff. */ E_IF_NO_ERRNO(result, fcntl(exe->child_fd_write, F_SETFL, - O_NONBLOCK), ok) + O_NONBLOCK), ok); + E_IF_NO_ERRNO(result, + fcntl(exe->child_fd_write, F_SETFD, + FD_CLOEXEC), ok); + E_IF_NO_ERRNO(result, + fcntl(exe->child_fd_write_x, F_SETFD, + FD_CLOEXEC), ok); { exe->write_fd_handler = ecore_main_fd_handler_add(exe->child_fd_write, @@ -841,7 +859,7 @@ ecore_exe_free(Ecore_Exe * exe) IF_FREE(exe->read_data_buf); IF_FREE(exe->error_data_buf); IF_FREE(exe->cmd); - + exes = _ecore_list2_remove(exes, exe); ECORE_MAGIC_SET(exe, ECORE_MAGIC_NONE); IF_FREE(exe->tag);