aboutsummaryrefslogtreecommitdiff
path: root/lib/base/console.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/base/console.cpp')
-rw-r--r--lib/base/console.cpp32
1 files changed, 22 insertions, 10 deletions
diff --git a/lib/base/console.cpp b/lib/base/console.cpp
index b3fbbf73..f49c7c4c 100644
--- a/lib/base/console.cpp
+++ b/lib/base/console.cpp
@@ -49,7 +49,7 @@ int bidirpipe(int pfd[], char *cmd , char *argv[])
}
eConsoleAppContainer::eConsoleAppContainer()
-:pid(-1), killstate(0)
+:pid(-1), killstate(0), in(0), out(0), err(0)
{
for (int i=0; i < 3; ++i)
fd[i]=-1;
@@ -244,15 +244,27 @@ void eConsoleAppContainer::sendCtrlC()
void eConsoleAppContainer::closePipes()
{
- in->stop();
- out->stop();
- err->stop();
- ::close(fd[0]);
- fd[0]=-1;
- ::close(fd[1]);
- fd[1]=-1;
- ::close(fd[2]);
- fd[2]=-1;
+ if (in)
+ in->stop();
+ if (out)
+ out->stop();
+ if (err)
+ err->stop();
+ if (fd[0] != -1)
+ {
+ ::close(fd[0]);
+ fd[0]=-1;
+ }
+ if (fd[1] != -1)
+ {
+ ::close(fd[1]);
+ fd[1]=-1;
+ }
+ if (fd[2] != -1)
+ {
+ ::close(fd[2]);
+ fd[2]=-1;
+ }
eDebug("pipes closed");
while( outbuf.size() ) // cleanup out buffer
{