Hi Dawn, I looked at the patch a bit. It looks ok to use select to check if the input is available before blocking on fgets. But I am still wondering why you need extra "return" in case of -exec-run. It seems to work ok on Linux. Where is it blocking in OSX? Btw, if the problem is only with gdb-exit then an extra check for it where we check for "quit" will work too.
Regards, Abid > -----Original Message----- > From: [email protected] [mailto:[email protected]] > Sent: 26 November 2014 00:13 > To: Abid, Hafiz; [email protected]; [email protected]; lldb- > [email protected] > Subject: Re: [Lldb-commits] [PATCH] fix lldb-mi hang on OSX > > Hi guys, > > Please help me resolve this blocking issue with lldb-mi on OSX. The patch > sent in the original e-mail (and included below) solves the problem by > enabling the ioctl code in CMICmnStreamStdinLinux::InputAvailable. > Attached is an alternate patch which uses select, but requires additional > code to handle -gdb-exit. > Without either of these patches, lldb-mi hangs on OSX after -exec-run, and - > gdb-exit doesn't terminate. > > Please apply one of these, or tell me how you would prefer to resolve this? > > Thanks, > -Dawn > > On Fri, Nov 21, 2014 at 06:57:39PM -0800, [email protected] wrote: > > This patch fixes the initial hang when starting up lldb-mi in > > interpreter mode on OSX. Without this, an additional "return" is > > required in order for lldb-mi to proceed after "-exec-run" and "-gdb-exit" > > is > also not handled properly. > > > > The patch enables code which was commented out. Was there a reason > for this? > > If the code is not desired, would it be OK to enable it for OSX only? > > Or would you prefer a command-line option for this? This code is > > definately needed on OSX to get past the hang. If OK as is, please commit? > > > > Thanks, > > -Dawn > > > > > Index: tools/lldb-mi/MICmnStreamStdinLinux.cpp > > > ================================================================ > === > > --- tools/lldb-mi/MICmnStreamStdinLinux.cpp (revision 222598) > > +++ tools/lldb-mi/MICmnStreamStdinLinux.cpp (working copy) > > @@ -22,6 +22,7 @@ > > // Third Party Headers: > > #if !defined(_MSC_VER) > > #include <sys/select.h> > > +#include <sys/ioctl.h> > > #include <termios.h> > > #endif // !defined( _MSC_VER ) > > #include <string.h> // For std::strerror() @@ -153,30 +154,27 @@ > > bool CMICmnStreamStdinLinux::InputAvailable(bool &vwbAvail) { > > - /* AD: Not used ATM but could come in handy just in case we need to > do > > - this, poll for input > > +#if !defined(_MSC_VER) > > + // poll for input > > + static const int STDIN = 0; > > + static bool bInitialized = false; > > > > - static const int STDIN = 0; > > - static bool bInitialized = false; > > + if (!bInitialized) > > + { > > + // Use termios to turn off line buffering > > + ::termios term; > > + ::tcgetattr(STDIN, &term); > > + term.c_lflag &= ~ICANON; > > + ::tcsetattr(STDIN, TCSANOW, &term); > > + ::setbuf(stdin, NULL); > > + bInitialized = true; > > + } > > > > - if( !bInitialized ) > > - { > > - // Use termios to turn off line buffering > > - ::termios term; > > - ::tcgetattr( STDIN, &term ); > > - ::term.c_lflag &= ~ICANON; > > - ::tcsetattr( STDIN, TCSANOW, &term ); > > - ::setbuf( stdin, NULL ); > > - bInitialized = true; > > - } > > + int nBytesWaiting; > > + ::ioctl(STDIN, FIONREAD, &nBytesWaiting); > > + vwbAvail = (nBytesWaiting > 0); > > +#endif // !defined(_MSC_VER) > > > > - int nBytesWaiting; > > - ::ioctl( STDIN, FIONREAD, &nBytesWaiting ); > > - vwbAvail = (nBytesWaiting > 0); > > - > > - return MIstatus::success; > > - */ > > - > > return MIstatus::success; > > } > > > > > _______________________________________________ > > lldb-commits mailing list > > [email protected] > > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits _______________________________________________ lldb-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
