diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-09-01 19:44:51 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-09-01 19:44:51 +0000 |
commit | 74b47e9ed68f3ed1386092316cce7e187ba2cacc (patch) | |
tree | 269629d410c4bb365404685d850d5cf456256903 /apps/app_externalivr.c | |
parent | f24fbc3714521f256483f7777ae5bbaabedb7455 (diff) |
ensure that file handles are never double closed
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6485 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_externalivr.c')
-rwxr-xr-x | apps/app_externalivr.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/apps/app_externalivr.c b/apps/app_externalivr.c index 59fc95340..75a2c7421 100755 --- a/apps/app_externalivr.c +++ b/apps/app_externalivr.c @@ -302,9 +302,6 @@ static int app_exec(struct ast_channel *chan, void *data) dup2(child_stdin[0], STDIN_FILENO); dup2(child_stdout[1], STDOUT_FILENO); dup2(child_stderr[1], STDERR_FILENO); - close(child_stdin[1]); - close(child_stdout[0]); - close(child_stderr[0]); for (i = STDERR_FILENO + 1; i < 1024; i++) close(i); execv(command, argv); @@ -323,8 +320,11 @@ static int app_exec(struct ast_channel *chan, void *data) struct ast_channel *rchan; close(child_stdin[0]); + child_stdin[0] = 0; close(child_stdout[1]); + child_stdout[1] = 0; close(child_stderr[1]); + child_stderr[1] = 0; if (!(child_events = fdopen(child_events_fd, "w"))) { ast_chan_log(LOG_WARNING, chan, "Could not open stream for child events\n"); @@ -505,20 +505,23 @@ static int app_exec(struct ast_channel *chan, void *data) if (child_errors) fclose(child_errors); - if (child_stdin[0]) { + if (child_stdin[0]) close(child_stdin[0]); + + if (child_stdin[1]) close(child_stdin[1]); - } - if (child_stdout[0]) { + if (child_stdout[0]) close(child_stdout[0]); + + if (child_stdout[1]) close(child_stdout[1]); - } - if (child_stderr[0]) { + if (child_stderr[0]) close(child_stderr[0]); + + if (child_stderr[1]) close(child_stderr[1]); - } if (u) { while ((entry = AST_LIST_REMOVE_HEAD(&u->playlist, list))) |