gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

commit beec82f990b2cd396d37d976b327b26c5c8af982
parent 4647d2acfe25c0653e314b92153a1e229b6749f7
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Sat, 29 Jun 2024 14:40:55 +0200

fix rare crash during integration test shutdown

Diffstat:
Msource/virusConsoleLib/consoleApp.cpp | 21+++++++++++----------
Msource/virusConsoleLib/consoleApp.h | 1+
2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/source/virusConsoleLib/consoleApp.cpp b/source/virusConsoleLib/consoleApp.cpp @@ -56,10 +56,7 @@ ConsoleApp::ConsoleApp(const std::string& _romFile, const DeviceModel _tiModel) ConsoleApp::~ConsoleApp() { - m_demo.reset(); - m_uc.reset(); - m_dsp1.reset(); - m_dsp2 = nullptr; + destroy(); } bool ConsoleApp::isValid() const @@ -217,6 +214,14 @@ void ConsoleApp::audioCallback(const uint32_t _audioCallbackCount) m_demo->process(1); } +void ConsoleApp::destroy() +{ + m_demo.reset(); + m_uc.reset(); + m_dsp1.reset(); + m_dsp2 = nullptr; +} + void ConsoleApp::run(const std::string& _audioOutputFilename, uint32_t _maxSampleCount/* = 0*/, uint32_t _blockSize/* = 64*/, bool _createDebugger/* = false*/, bool _dumpAssembler/* = false*/) { assert(!_audioOutputFilename.empty()); @@ -279,10 +284,6 @@ void ConsoleApp::run(const std::string& _audioOutputFilename, uint32_t _maxSampl midiEvents.clear(); } - // wait until DSP enters blocking state so that resetting the callback is safe - auto& audio = m_dsp1->getAudio(); - while(!audio.getAudioOutputs().full() && !audio.getAudioInputs().empty()) - std::this_thread::yield(); - - esai.setCallback([&](dsp56k::Audio*){},0); + m_dsp1.reset(); + destroy(); } diff --git a/source/virusConsoleLib/consoleApp.h b/source/virusConsoleLib/consoleApp.h @@ -34,6 +34,7 @@ private: void bootDSP(bool _createDebugger) const; dsp56k::IPeripherals& getYPeripherals() const; void audioCallback(uint32_t _audioCallbackCount); + void destroy(); const std::string m_romName; virusLib::ROMFile m_rom;