diff --git a/src/apps/debugger/debugger_interface/DebuggerInterface.cpp b/src/apps/debugger/debugger_interface/DebuggerInterface.cpp index 4b077943e5..a4da69e260 100644 --- a/src/apps/debugger/debugger_interface/DebuggerInterface.cpp +++ b/src/apps/debugger/debugger_interface/DebuggerInterface.cpp @@ -1,5 +1,6 @@ /* * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. + * Copyright 2010, Rene Gollent, rene@gollent.com. * Distributed under the terms of the MIT License. */ @@ -319,9 +320,6 @@ status_t DebuggerInterface::GetNextDebugEvent(DebugEvent*& _event) { while (true) { - debug_debugger_message_data message; - int32 messageCode; - object_wait_info infos[2]; infos[0].object = fDebuggerPort; infos[0].type = B_OBJECT_TYPE_PORT; @@ -338,35 +336,13 @@ DebuggerInterface::GetNextDebugEvent(DebugEvent*& _event) return size; } - if (infos[1].events & B_EVENT_READ) + if (infos[0].events & B_EVENT_READ) + return _GetNextDebuggerEvent(_event); + else if (infos[1].events & B_EVENT_READ) return _GetNextSystemWatchEvent(_event); - - size = read_port(fDebuggerPort, &messageCode, &message, - sizeof(message)); - if (size < 0) { - if (size == B_INTERRUPTED) - continue; - - return size; - } - - if (message.origin.team != fTeamID) - continue; - - bool ignore = false; - status_t error = _CreateDebugEvent(messageCode, message, ignore, - _event); - if (error != B_OK) - return error; - - if (ignore) { - if (message.origin.thread >= 0 && message.origin.nub_port >= 0) - continue_thread(message.origin.nub_port, message.origin.thread); - continue; - } - - return B_OK; } + + return B_OK; } @@ -759,6 +735,43 @@ DebuggerInterface::_CreateDebugEvent(int32 messageCode, } +status_t +DebuggerInterface::_GetNextDebuggerEvent(DebugEvent*& _event) +{ + while (true) { + debug_debugger_message_data message; + int32 messageCode; + ssize_t size = read_port(fDebuggerPort, &messageCode, &message, + sizeof(message)); + if (size < 0) { + if (size == B_INTERRUPTED) + continue; + + return size; + } + + if (message.origin.team != fTeamID) + continue; + + bool ignore = false; + status_t error = _CreateDebugEvent(messageCode, message, ignore, + _event); + if (error != B_OK) + return error; + + if (ignore) { + if (message.origin.thread >= 0 && message.origin.nub_port >= 0) + continue_thread(message.origin.nub_port, message.origin.thread); + continue; + } + + return B_OK; + } + + return B_OK; +} + + status_t DebuggerInterface::_GetNextSystemWatchEvent(DebugEvent*& _event) { diff --git a/src/apps/debugger/debugger_interface/DebuggerInterface.h b/src/apps/debugger/debugger_interface/DebuggerInterface.h index 1d4e14680d..da99ebc0cc 100644 --- a/src/apps/debugger/debugger_interface/DebuggerInterface.h +++ b/src/apps/debugger/debugger_interface/DebuggerInterface.h @@ -1,5 +1,6 @@ /* * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. + * Copyright 2010, Rene Gollent, rene@gollent.com. * Distributed under the terms of the MIT License. */ #ifndef DEBUGGER_INTERFACE_H @@ -73,6 +74,7 @@ private: const debug_debugger_message_data& message, bool& _ignore, DebugEvent*& _event); + status_t _GetNextDebuggerEvent(DebugEvent*& _event); status_t _GetNextSystemWatchEvent(DebugEvent*& _event); private: