user_debugger: Adjust handling of continue request.
- B_DEBUG_MESSAGE_CONTINUE_THREAD now checks if the thread in question is in a suspended state rather than waiting on the debug nub port, and if so, handles resuming it automatically. This allows the continue message to be used on the main thread of a team that was freshly created under debug control without the API user having to be cognizant of the distinction.
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2005-2011, Ingo Weinhold, [email protected].
|
* Copyright 2005-2011, Ingo Weinhold, [email protected].
|
||||||
|
* Copyright 2015, Rene Gollent, [email protected].
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -1854,6 +1855,18 @@ debug_nub_thread(void *)
|
|||||||
result = write_port(threadDebugPort,
|
result = write_port(threadDebugPort,
|
||||||
B_DEBUGGED_THREAD_MESSAGE_CONTINUE,
|
B_DEBUGGED_THREAD_MESSAGE_CONTINUE,
|
||||||
&commandMessage, sizeof(commandMessage));
|
&commandMessage, sizeof(commandMessage));
|
||||||
|
} else if (result == B_BAD_THREAD_STATE) {
|
||||||
|
Thread* thread = Thread::GetAndLock(threadID);
|
||||||
|
if (thread == NULL)
|
||||||
|
break;
|
||||||
|
|
||||||
|
BReference<Thread> threadReference(thread, true);
|
||||||
|
ThreadLocker threadLocker(thread, true);
|
||||||
|
if (thread->state == B_THREAD_SUSPENDED) {
|
||||||
|
threadLocker.Unlock();
|
||||||
|
resume_thread(threadID);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user