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 | |
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.
-rw-r--r-- | grapher/StapParser.cxx | 2 | ||||
-rw-r--r-- | grapher/StapParser.hxx | 8 | ||||
-rw-r--r-- | grapher/grapher.cxx | 21 |
3 files changed, 15 insertions, 16 deletions
diff --git a/grapher/StapParser.cxx b/grapher/StapParser.cxx index 9bb9b9c9..eea85006 100644 --- a/grapher/StapParser.cxx +++ b/grapher/StapParser.cxx @@ -70,7 +70,7 @@ vector<string> commaSplit(const boost::sub_range<Glib::ustring>& range) return true; char buf[256]; ssize_t bytes_read = 0; - bytes_read = read(STDIN_FILENO, buf, sizeof(buf) - 1); + bytes_read = read(_inFd, buf, sizeof(buf) - 1); if (bytes_read <= 0) { _win.hide(); diff --git a/grapher/StapParser.hxx b/grapher/StapParser.hxx index f4f6bdef..eeebed63 100644 --- a/grapher/StapParser.hxx +++ b/grapher/StapParser.hxx @@ -13,14 +13,20 @@ class StapParser Gtk::Window& _win; GraphWidget& _widget; int _errFd; + int _inFd; public: StapParser(Gtk::Window& win, - GraphWidget& widget) : _win(win), _widget(widget), _errFd(-1) {} + GraphWidget& widget) : _win(win), _widget(widget), _errFd(-1), + _inFd(-1) + { + } void parseData(std::tr1::shared_ptr<GraphDataBase> gdata, double time, const std::string& dataString); bool ioCallback(Glib::IOCondition ioCondition); bool errIoCallback(Glib::IOCondition ioCondition); int getErrFd() { return _errFd; } void setErrFd(int fd) { _errFd = fd; } + int getInFd() { return _inFd; } + void setInFd(int fd) { _inFd = fd; } }; } 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; } |