Debugger: Fixed some deadlocks
This commit is contained in:
parent
614fee646c
commit
e28ce321d4
4 changed files with 17 additions and 13 deletions
|
@ -82,6 +82,7 @@ void Console::Initialize(string romFilename, stringstream *filestream, string ip
|
|||
_initialized = true;
|
||||
|
||||
if(_debugger) {
|
||||
auto lock = _debuggerLock.AcquireSafe();
|
||||
StopDebugger();
|
||||
GetDebugger();
|
||||
}
|
||||
|
@ -229,8 +230,10 @@ void Console::Stop()
|
|||
{
|
||||
_stop = true;
|
||||
EmulationSettings::ClearFlags(EmulationFlags::Paused);
|
||||
if(_debugger) {
|
||||
_debugger->Run();
|
||||
|
||||
shared_ptr<Debugger> debugger = _debugger;
|
||||
if(debugger) {
|
||||
debugger->Run();
|
||||
}
|
||||
_stopLock.Acquire();
|
||||
_stopLock.Release();
|
||||
|
@ -238,9 +241,10 @@ void Console::Stop()
|
|||
|
||||
void Console::Pause()
|
||||
{
|
||||
if(Console::Instance->_debugger) {
|
||||
shared_ptr<Debugger> debugger = Console::Instance->_debugger;
|
||||
if(debugger) {
|
||||
//Make sure debugger resumes if we try to pause the emu, otherwise we will get deadlocked.
|
||||
Console::Instance->_debugger->Suspend();
|
||||
debugger->Suspend();
|
||||
}
|
||||
Console::Instance->_pauseLock.Acquire();
|
||||
//Spin wait until emu pauses
|
||||
|
@ -252,9 +256,10 @@ void Console::Resume()
|
|||
Console::Instance->_runLock.Release();
|
||||
Console::Instance->_pauseLock.Release();
|
||||
|
||||
if(Console::Instance->_debugger) {
|
||||
shared_ptr<Debugger> debugger = Console::Instance->_debugger;
|
||||
if(debugger) {
|
||||
//Make sure debugger resumes if we try to pause the emu, otherwise we will get deadlocked.
|
||||
Console::Instance->_debugger->Resume();
|
||||
debugger->Resume();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -452,6 +457,7 @@ void Console::LoadState(uint8_t *buffer, uint32_t bufferSize)
|
|||
|
||||
std::shared_ptr<Debugger> Console::GetDebugger()
|
||||
{
|
||||
auto lock = _debuggerLock.AcquireSafe();
|
||||
if(!_debugger) {
|
||||
_debugger.reset(new Debugger(Console::Instance, _cpu, _ppu, _memoryManager, _mapper));
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ class Console
|
|||
shared_ptr<PPU> _ppu;
|
||||
unique_ptr<APU> _apu;
|
||||
shared_ptr<Debugger> _debugger;
|
||||
SimpleLock _debuggerLock;
|
||||
shared_ptr<BaseMapper> _mapper;
|
||||
unique_ptr<ControlManager> _controlManager;
|
||||
shared_ptr<MemoryManager> _memoryManager;
|
||||
|
|
|
@ -307,11 +307,11 @@ void Debugger::PrivateProcessRamOperation(MemoryOperationType type, uint16_t &ad
|
|||
|
||||
breakDone = SleepUntilResume();
|
||||
|
||||
if(_traceLogger) {
|
||||
auto lock = _traceLock.AcquireSafe();
|
||||
shared_ptr<TraceLogger> logger = _traceLogger;
|
||||
if(logger) {
|
||||
DebugState state;
|
||||
GetState(&state);
|
||||
_traceLogger->Log(state, _disassembler->GetDisassemblyInfo(absoluteAddr, absoluteRamAddr, addr));
|
||||
logger->Log(state, _disassembler->GetDisassemblyInfo(absoluteAddr, absoluteRamAddr, addr));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -518,14 +518,12 @@ void Debugger::SetNextStatement(uint16_t addr)
|
|||
|
||||
void Debugger::StartTraceLogger(TraceLoggerOptions options)
|
||||
{
|
||||
auto lock = _traceLock.AcquireSafe();
|
||||
string traceFilepath = FolderUtilities::CombinePath(FolderUtilities::GetDebuggerFolder(), "Trace.txt");
|
||||
_traceLogger.reset(new TraceLogger(traceFilepath, options));
|
||||
}
|
||||
|
||||
void Debugger::StopTraceLogger()
|
||||
{
|
||||
auto lock = _traceLock.AcquireSafe();
|
||||
_traceLogger.reset();
|
||||
}
|
||||
|
||||
|
|
|
@ -69,8 +69,7 @@ private:
|
|||
|
||||
SimpleLock _breakLock;
|
||||
|
||||
unique_ptr<TraceLogger> _traceLogger;
|
||||
SimpleLock _traceLock;
|
||||
shared_ptr<TraceLogger> _traceLogger;
|
||||
|
||||
uint16_t *_currentReadAddr; //Used to alter the executing address via "Set Next Statement"
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue