diff --git a/src/apps/debugger/controllers/TeamDebugger.cpp b/src/apps/debugger/controllers/TeamDebugger.cpp
index 7885590..6787c4d 100644
a
|
b
|
TeamDebugger::_HandleDebuggerMessage(DebugEvent* event)
|
1270 | 1270 | TRACE_EVENTS("B_DEBUGGER_MESSAGE_POST_SYSCALL: syscall: %" |
1271 | 1271 | B_PRIu32 "\n", postSyscallEvent->GetSyscallInfo().Syscall()); |
1272 | 1272 | handled = _HandlePostSyscall(postSyscallEvent); |
| 1273 | if (handled && handler != NULL) |
| 1274 | handler->HandleThreadDebugged(NULL); |
1273 | 1275 | break; |
1274 | 1276 | } |
1275 | 1277 | case B_DEBUGGER_MESSAGE_PRE_SYSCALL: |
… |
… |
TeamDebugger::_HandlePostSyscall(PostSyscallEvent* event)
|
1460 | 1462 | break; |
1461 | 1463 | } |
1462 | 1464 | |
| 1465 | AutoLocker< ::Team> teamLocker(fTeam); |
| 1466 | ::Thread* thread = fTeam->ThreadByID(event->Thread()); |
| 1467 | if (thread != NULL && thread->GetDebugRequestPending()) |
| 1468 | return true; |
| 1469 | |
1463 | 1470 | return false; |
1464 | 1471 | } |
1465 | 1472 | |
diff --git a/src/apps/debugger/controllers/ThreadHandler.cpp b/src/apps/debugger/controllers/ThreadHandler.cpp
index 2a84a5b..8a44f9c 100644
a
|
b
|
ThreadHandler::HandleThreadAction(uint32 action, target_addr_t address)
|
243 | 243 | return; |
244 | 244 | case MSG_THREAD_STOP: |
245 | 245 | fStepMode = STEP_NONE; |
246 | | fDebuggerInterface->StopThread(ThreadID()); |
| 246 | if (fDebuggerInterface->StopThread(ThreadID()) == B_OK) |
| 247 | fThread->SetDebugRequestPending(); |
247 | 248 | return; |
248 | 249 | case MSG_THREAD_STEP_OVER: |
249 | 250 | case MSG_THREAD_STEP_INTO: |
diff --git a/src/apps/debugger/model/Thread.cpp b/src/apps/debugger/model/Thread.cpp
index a52c6e1..3ad4b9f 100644
a
|
b
|
Thread::Thread(Team* team, thread_id threadID)
|
19 | 19 | fID(threadID), |
20 | 20 | fState(THREAD_STATE_UNKNOWN), |
21 | 21 | fReturnValueInfos(NULL), |
| 22 | fDebugRequestPending(false), |
22 | 23 | fStoppedReason(THREAD_STOPPED_UNKNOWN), |
23 | 24 | fCpuState(NULL), |
24 | 25 | fStackTrace(NULL) |
… |
… |
Thread::SetState(uint32 state, uint32 reason, const BString& info)
|
78 | 79 | SetCpuState(NULL); |
79 | 80 | SetStackTrace(NULL); |
80 | 81 | ClearReturnValueInfos(); |
| 82 | fDebugRequestPending = false; |
81 | 83 | } |
82 | 84 | |
83 | 85 | fTeam->NotifyThreadStateChanged(this); |
… |
… |
Thread::SetStackTrace(StackTrace* trace)
|
119 | 121 | fTeam->NotifyThreadStackTraceChanged(this); |
120 | 122 | } |
121 | 123 | |
| 124 | void |
| 125 | Thread::SetDebugRequestPending() |
| 126 | { |
| 127 | fDebugRequestPending = true; |
| 128 | } |
| 129 | |
122 | 130 | |
123 | 131 | status_t |
124 | 132 | Thread::AddReturnValueInfo(ReturnValueInfo* info) |
diff --git a/src/apps/debugger/model/Thread.h b/src/apps/debugger/model/Thread.h
index 9f936c7..5993df0 100644
a
|
b
|
public:
|
71 | 71 | StackTrace* GetStackTrace() const { return fStackTrace; } |
72 | 72 | void SetStackTrace(StackTrace* trace); |
73 | 73 | |
| 74 | bool GetDebugRequestPending() const |
| 75 | { return fDebugRequestPending; } |
| 76 | void SetDebugRequestPending(); |
| 77 | |
74 | 78 | ReturnValueInfoList* |
75 | 79 | ReturnValueInfos() const |
76 | 80 | { return fReturnValueInfos; } |
… |
… |
private:
|
84 | 88 | uint32 fState; |
85 | 89 | ReturnValueInfoList* |
86 | 90 | fReturnValueInfos; |
| 91 | bool fDebugRequestPending; |
87 | 92 | uint32 fStoppedReason; |
88 | 93 | BString fStoppedReasonInfo; |
89 | 94 | CpuState* fCpuState; |