Ticket #9854: 9854.patch

File 9854.patch, 3.2 KB (added by anevilyak, 11 years ago)
  • src/apps/debugger/controllers/TeamDebugger.cpp

    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)  
    12701270            TRACE_EVENTS("B_DEBUGGER_MESSAGE_POST_SYSCALL: syscall: %"
    12711271                B_PRIu32 "\n", postSyscallEvent->GetSyscallInfo().Syscall());
    12721272            handled = _HandlePostSyscall(postSyscallEvent);
     1273            if (handled && handler != NULL)
     1274                handler->HandleThreadDebugged(NULL);
    12731275            break;
    12741276        }
    12751277        case B_DEBUGGER_MESSAGE_PRE_SYSCALL:
    TeamDebugger::_HandlePostSyscall(PostSyscallEvent* event)  
    14601462            break;
    14611463    }
    14621464
     1465    AutoLocker< ::Team> teamLocker(fTeam);
     1466    ::Thread* thread = fTeam->ThreadByID(event->Thread());
     1467    if (thread != NULL && thread->GetDebugRequestPending())
     1468        return true;
     1469
    14631470    return false;
    14641471}
    14651472
  • src/apps/debugger/controllers/ThreadHandler.cpp

    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)  
    243243            return;
    244244        case MSG_THREAD_STOP:
    245245            fStepMode = STEP_NONE;
    246             fDebuggerInterface->StopThread(ThreadID());
     246            if (fDebuggerInterface->StopThread(ThreadID()) == B_OK)
     247                fThread->SetDebugRequestPending();
    247248            return;
    248249        case MSG_THREAD_STEP_OVER:
    249250        case MSG_THREAD_STEP_INTO:
  • src/apps/debugger/model/Thread.cpp

    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)  
    1919    fID(threadID),
    2020    fState(THREAD_STATE_UNKNOWN),
    2121    fReturnValueInfos(NULL),
     22    fDebugRequestPending(false),
    2223    fStoppedReason(THREAD_STOPPED_UNKNOWN),
    2324    fCpuState(NULL),
    2425    fStackTrace(NULL)
    Thread::SetState(uint32 state, uint32 reason, const BString& info)  
    7879        SetCpuState(NULL);
    7980        SetStackTrace(NULL);
    8081        ClearReturnValueInfos();
     82        fDebugRequestPending = false;
    8183    }
    8284
    8385    fTeam->NotifyThreadStateChanged(this);
    Thread::SetStackTrace(StackTrace* trace)  
    119121    fTeam->NotifyThreadStackTraceChanged(this);
    120122}
    121123
     124void
     125Thread::SetDebugRequestPending()
     126{
     127    fDebugRequestPending = true;
     128}
     129
    122130
    123131status_t
    124132Thread::AddReturnValueInfo(ReturnValueInfo* info)
  • src/apps/debugger/model/Thread.h

    diff --git a/src/apps/debugger/model/Thread.h b/src/apps/debugger/model/Thread.h
    index 9f936c7..5993df0 100644
    a b public:  
    7171            StackTrace*         GetStackTrace() const   { return fStackTrace; }
    7272            void                SetStackTrace(StackTrace* trace);
    7373
     74            bool                GetDebugRequestPending() const
     75                                    { return fDebugRequestPending; }
     76            void                SetDebugRequestPending();
     77
    7478            ReturnValueInfoList*
    7579                                ReturnValueInfos() const
    7680                                { return fReturnValueInfos; }
    private:  
    8488            uint32              fState;
    8589            ReturnValueInfoList*
    8690                                fReturnValueInfos;
     91            bool                fDebugRequestPending;
    8792            uint32              fStoppedReason;
    8893            BString             fStoppedReasonInfo;
    8994            CpuState*           fCpuState;