diff options
author | Mark Spruiell <mes@zeroc.com> | 2005-01-27 22:27:48 +0000 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2005-01-27 22:27:48 +0000 |
commit | 5ca5673fb170e23cd2712e41c042d4f9061cd5b6 (patch) | |
tree | 6c5c77538f3195236ee392648c2ebbc46442f917 /cpp/src | |
parent | Fix (diff) | |
download | ice-5ca5673fb170e23cd2712e41c042d4f9061cd5b6.tar.bz2 ice-5ca5673fb170e23cd2712e41c042d4f9061cd5b6.tar.xz ice-5ca5673fb170e23cd2712e41c042d4f9061cd5b6.zip |
do not close stdout/stderr if redirected
Diffstat (limited to 'cpp/src')
-rwxr-xr-x | cpp/src/Ice/Service.cpp | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/cpp/src/Ice/Service.cpp b/cpp/src/Ice/Service.cpp index 5cc681d11c0..267918e0b8d 100755 --- a/cpp/src/Ice/Service.cpp +++ b/cpp/src/Ice/Service.cpp @@ -1361,7 +1361,12 @@ Ice::Service::runDaemon(int argc, char* argv[]) pos += n; break; } - cerr << argv[0] << ": failure occurred in daemon:" << endl << msg << endl << flush; + cerr << argv[0] << ": failure occurred in daemon"; + if(strlen(msg) > 0) + { + cerr << ':' << endl << msg; + } + cerr << endl << flush; _exit(EXIT_FAILURE); } @@ -1475,9 +1480,20 @@ Ice::Service::runDaemon(int argc, char* argv[]) { // // Close unnecessary file descriptors. - // + // + PropertiesPtr properties = _communicator->getProperties(); + string stdOut = properties->getProperty("Ice.StdOut"); + string stdErr = properties->getProperty("Ice.StdErr"); + for(int i = 0; i < fdMax; ++i) { + // + // NOTE: Do not close stdout if Ice.StdOut is defined. Likewise for Ice.StdErr. + // + if((i == 1 && !stdOut.empty()) || (i == 2 && !stdErr.empty())) + { + continue; + } if(FD_ISSET(i, &fdsToClose)) { close(i); @@ -1490,10 +1506,16 @@ Ice::Service::runDaemon(int argc, char* argv[]) int fd; fd = open("/dev/null", O_RDWR); assert(fd == 0); - fd = dup2(0, 1); - assert(fd == 1); - fd = dup2(1, 2); - assert(fd == 2); + if(stdOut.empty()) + { + fd = dup2(0, 1); + assert(fd == 1); + } + if(stdErr.empty()) + { + fd = dup2(1, 2); + assert(fd == 2); + } } // |