[Lldb-commits] [PATCH] Reduce number of threads in lldb-mi.
Hafiz Abid Qadeer
abidh.haq at gmail.com
Thu Feb 19 02:48:22 PST 2015
Lock mutex before processing command.
http://reviews.llvm.org/D7746
Files:
tools/lldb-mi/MIDriver.cpp
tools/lldb-mi/MIDriver.h
Index: tools/lldb-mi/MIDriver.cpp
===================================================================
--- tools/lldb-mi/MIDriver.cpp
+++ tools/lldb-mi/MIDriver.cpp
@@ -551,16 +551,6 @@
// Grab the thread manager
CMICmnThreadMgrStd &rThreadMgr = CMICmnThreadMgrStd::Instance();
- // Start the stdin thread
- bOk &= m_rStdin.SetVisitor(*this);
- if (bOk && !rThreadMgr.ThreadStart<CMICmnStreamStdin>(m_rStdin))
- {
- const CMIUtilString errMsg = CMIUtilString::Format(MIRSRC(IDS_THREADMGR_ERR_THREAD_FAIL_CREATE),
- CMICmnThreadMgrStd::Instance().GetErrorDescription().c_str());
- SetErrorDescriptionn(errMsg);
- return MIstatus::failure;
- }
-
// Start the event polling thread
if (bOk && !rThreadMgr.ThreadStart<CMICmnLLDBDebugger>(m_rLldbDebugger))
{
@@ -589,6 +579,36 @@
}
//++ ------------------------------------------------------------------------------------
+// Details: Wait on new line of data from stdin stream (completed by '\n' or '\r').
+// Type: Method.
+// Args: cmd - (W) Cmd buffer to fill.
+// Return: bool - false of error and true otherwise.
+// Throws: None.
+//--
+bool
+ReadLine(CMIUtilString &cmd)
+{
+ const int SIZE = 2048;
+ char buf[SIZE];
+ // Read user input
+ const MIchar *pText = ::fgets(&buf[0], SIZE, stdin);
+ if (pText == nullptr)
+ return false;
+
+ // Strip off new line characters
+ for (MIchar *pI = buf; *pI != '\0'; pI++)
+ {
+ if ((*pI == '\n') || (*pI == '\r'))
+ {
+ *pI = '\0';
+ break;
+ }
+ }
+ cmd = CMIUtilString(buf);
+ return true;
+}
+
+//++ ------------------------------------------------------------------------------------
// Details: Call this function puts *this driver to work.
// This function is used by the application's main thread.
// Type: Overridden.
@@ -627,11 +647,26 @@
// While the app is active
while (!m_bExitApp)
{
- // Poll stdin queue and dispatch
- if (!ReadStdinLineQueue())
+ CMIUtilString lineText;
+ if (::ReadLine (lineText) && (!lineText.empty ()) )
{
- // Something went wrong
- break;
+ if (lineText == "quit")
+ {
+ // We want to be exiting when receiving a quit command
+ m_bExitApp = true;
+ break;
+ }
+
+ bool bOk = false;
+ {
+ // Lock Mutex before processing commands so that we don't disturb an event
+ // being processed
+ CMIUtilThreadLock lock(CMICmnLLDBDebugSessionInfo::Instance().GetSessionMutex());
+ bOk = InterpretCommand(lineText);
+ }
+ // Draw prompt if desired
+ if (bOk && m_rStdin.GetEnablePrompt())
+ m_rStdOut.WriteMIResponse(m_rStdin.GetPrompt());
}
}
Index: tools/lldb-mi/MIDriver.h
===================================================================
--- tools/lldb-mi/MIDriver.h
+++ tools/lldb-mi/MIDriver.h
@@ -180,3 +180,5 @@
bool m_bDriverDebuggingArgExecutable; // True = The MI Driver (MI mode) is debugging executable passed as argument, false = running via
// a client i.e Eclipse
};
+
+bool ReadLine(CMIUtilString &cmd);
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D7746.20266.patch
Type: text/x-patch
Size: 3426 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150219/62eb731d/attachment.bin>
More information about the lldb-commits
mailing list