aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_externalivr.c
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-09-01 19:44:51 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-09-01 19:44:51 +0000
commit74b47e9ed68f3ed1386092316cce7e187ba2cacc (patch)
tree269629d410c4bb365404685d850d5cf456256903 /apps/app_externalivr.c
parentf24fbc3714521f256483f7777ae5bbaabedb7455 (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-xapps/app_externalivr.c21
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)))