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:
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;