diff options
author | Tim Moore <timoore@redhat.com> | 2009-10-20 22:14:00 +0200 |
---|---|---|
committer | Tim Moore <timoore@redhat.com> | 2009-10-27 12:52:24 +0100 |
commit | 6fb95a63ecfa32b1524790ee42695f19773f2174 (patch) | |
tree | 7b5e93a6334b22bc7f99eeb82791f73c2ade71e3 /grapher/grapher.cxx | |
parent | a8f1332f49206b314871fbdea50ab1045401a024 (diff) | |
download | systemtap-steved-6fb95a63ecfa32b1524790ee42695f19773f2174.tar.gz systemtap-steved-6fb95a63ecfa32b1524790ee42695f19773f2174.tar.xz systemtap-steved-6fb95a63ecfa32b1524790ee42695f19773f2174.zip |
Change stap parser to use an input file descriptor other than stdin
* grapher/StapParser.hxx (_inFd, getInFd, setInFd): new member and fuctions
* grapher/StapParser.cxx (ioCallback): Use _inFd variable
instead of stdin.
* grapher/grapher.cxx (StapLauncher::launch): Don't read input from stap on
stdin; use the the read end of the pipe.
Diffstat (limited to 'grapher/grapher.cxx')
-rw-r--r-- | grapher/grapher.cxx | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/grapher/grapher.cxx b/grapher/grapher.cxx index 429d0537..398b35f1 100644 --- a/grapher/grapher.cxx +++ b/grapher/grapher.cxx @@ -257,8 +257,6 @@ protected: int StapLauncher::launch() { - int stapErrFd = -1; - if (pipe(&signalPipe[0]) < 0) { std::perror("pipe"); @@ -286,9 +284,6 @@ int StapLauncher::launch() } else if (_childPid) { - dup2(pipefd[0], STDIN_FILENO); - stapErrFd = pipefd[2]; - close(pipefd[0]); close(pipefd[1]); close(pipefd[3]); } @@ -318,14 +313,12 @@ int StapLauncher::launch() } _exit(1); } - if (stapErrFd >= 0) - { - _stapParser->setErrFd(stapErrFd); - Glib::signal_io().connect(sigc::mem_fun(*_stapParser, - &StapParser::errIoCallback), - stapErrFd, - Glib::IO_IN); - } + _stapParser->setErrFd(pipefd[2]); + _stapParser->setInFd(pipefd[0]); + Glib::signal_io().connect(sigc::mem_fun(*_stapParser, + &StapParser::errIoCallback), + pipefd[2], + Glib::IO_IN); setSigfd(signalPipe[0]); if (signalPipe[0] >= 0) { @@ -335,7 +328,7 @@ int StapLauncher::launch() } Glib::signal_io().connect(sigc::mem_fun(*_stapParser, &StapParser::ioCallback), - STDIN_FILENO, + pipefd[0], Glib::IO_IN | Glib::IO_HUP); return _childPid; } |