diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 143296be29cb5e4a410ed6dbce25f081c70d1c07..5639b7b4b6fcf2d679ad91c5765d7cf7abb5c50e 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -191,6 +191,9 @@ GdbEngine::GdbEngine(DebuggerManager *manager) : m_trkOptions->fromSettings(Core::ICore::instance()->settings()); m_gdbAdapter = 0; + // Needs no resetting in initializeVariables() + m_busy = false; + connect(theDebuggerAction(AutoDerefPointers), SIGNAL(valueChanged(QVariant)), this, SLOT(setAutoDerefPointers(QVariant))); } @@ -594,6 +597,10 @@ void GdbEngine::readGdbStandardOutput() m_inbuffer.append(m_gdbProc.readAllStandardOutput()); + // This can trigger when a dialog starts a nested event loop + if (m_busy) + return; + while (newstart < m_inbuffer.size()) { int start = newstart; int end = m_inbuffer.indexOf('\n', scan); @@ -612,7 +619,9 @@ void GdbEngine::readGdbStandardOutput() continue; } #endif + m_busy = true; handleResponse(QByteArray::fromRawData(m_inbuffer.constData() + start, end - start)); + m_busy = false; } m_inbuffer.clear(); } diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index 9e23fee2b2ec67c93274d4a6b70aceab4a4ccc0f..57683529fed1f35d3855fff06b20885c64d9a533 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -160,6 +160,7 @@ private: QTextCodec::ConverterState m_outputCodecState; QByteArray m_inbuffer; + bool m_busy; QProcess m_gdbProc; AbstractGdbAdapter *m_gdbAdapter;