ensure that file handles are never double closed
authorKevin P. Fleming <kpfleming@digium.com>
Thu, 1 Sep 2005 19:44:51 +0000 (19:44 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Thu, 1 Sep 2005 19:44:51 +0000 (19:44 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6485 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_externalivr.c

index 59fc953..75a2c74 100755 (executable)
@@ -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);
                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);
                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]);
                struct ast_channel *rchan;
 
                close(child_stdin[0]);
+               child_stdin[0] = 0;
                close(child_stdout[1]);
                close(child_stdout[1]);
+               child_stdout[1] = 0;
                close(child_stderr[1]);
                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");
 
                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_errors)
                fclose(child_errors);
 
-       if (child_stdin[0]) {
+       if (child_stdin[0])
                close(child_stdin[0]);
                close(child_stdin[0]);
+
+       if (child_stdin[1])
                close(child_stdin[1]);
                close(child_stdin[1]);
-       }
 
 
-       if (child_stdout[0]) {
+       if (child_stdout[0])
                close(child_stdout[0]);
                close(child_stdout[0]);
+
+       if (child_stdout[1])
                close(child_stdout[1]);
                close(child_stdout[1]);
-       }
 
 
-       if (child_stderr[0]) {
+       if (child_stderr[0])
                close(child_stderr[0]);
                close(child_stderr[0]);
+
+       if (child_stderr[1])
                close(child_stderr[1]);
                close(child_stderr[1]);
-       }
 
        if (u) {
                while ((entry = AST_LIST_REMOVE_HEAD(&u->playlist, list)))
 
        if (u) {
                while ((entry = AST_LIST_REMOVE_HEAD(&u->playlist, list)))