From 9abaeaf8d8ec814f5a13de95e51c3efd7a026e4d Mon Sep 17 00:00:00 2001 From: Sour Date: Thu, 28 Dec 2017 16:30:37 -0500 Subject: [PATCH] Debugger: Fixed infrequent deadlock when switching games while debugger window is opened --- Core/Console.cpp | 11 +++++++++-- Core/Console.h | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Core/Console.cpp b/Core/Console.cpp index b7a2af79..d735a586 100644 --- a/Core/Console.cpp +++ b/Core/Console.cpp @@ -163,6 +163,8 @@ bool Console::Initialize(VirtualFile &romFile, VirtualFile &patchFile) _initialized = true; if(_debugger) { + //Reset debugger if it was running before + auto lock = _debuggerLock.AcquireSafe(); StopDebugger(); GetDebugger(); } @@ -660,8 +662,13 @@ std::shared_ptr Console::GetDebugger(bool autoStart) { shared_ptr debugger = _debugger; if(!debugger && autoStart) { - debugger.reset(new Debugger(Console::Instance, _cpu, _ppu, _apu, _memoryManager, _mapper)); - _debugger = debugger; + //Lock to make sure we don't try to start debuggers in 2 separate threads at once + auto lock = _debuggerLock.AcquireSafe(); + debugger = _debugger; + if(!debugger) { + debugger.reset(new Debugger(Console::Instance, _cpu, _ppu, _apu, _memoryManager, _mapper)); + _debugger = debugger; + } } return debugger; } diff --git a/Core/Console.h b/Core/Console.h index 2742ea2e..82dbb035 100644 --- a/Core/Console.h +++ b/Core/Console.h @@ -31,6 +31,7 @@ class Console SimpleLock _pauseLock; SimpleLock _runLock; SimpleLock _stopLock; + SimpleLock _debuggerLock; shared_ptr _rewindManager; shared_ptr _cpu;