From 844af13fc6fec3c363059e5c99340b84008b871b Mon Sep 17 00:00:00 2001 From: aj_genius Date: Sun, 8 Feb 2004 23:45:32 +0000 Subject: [PATCH] fix ClearUp and add Kill() override to JackPlugin --- SpiralSound/Plugins/JackPlugin/JackPlugin.C | 20 ++++++++++++++++++++ SpiralSound/Plugins/JackPlugin/JackPlugin.h | 2 ++ SpiralSynthModular.C | 6 +++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/SpiralSound/Plugins/JackPlugin/JackPlugin.C b/SpiralSound/Plugins/JackPlugin/JackPlugin.C index 6a1547e..3420925 100644 --- a/SpiralSound/Plugins/JackPlugin/JackPlugin.C +++ b/SpiralSound/Plugins/JackPlugin/JackPlugin.C @@ -450,9 +450,27 @@ m_Connected(false) JackPlugin::~JackPlugin() { + if (m_JackClient) + { + m_JackClient->Detach(); + delete m_JackClient; + m_JackClient=NULL; + } +} + +bool JackPlugin::Kill() +{ + m_IsDead=true; + + UpdatePluginInfoWithHost(); + RemoveAllInputs (); + RemoveAllOutputs (); + UpdatePluginInfoWithHost(); + m_JackClient->Detach(); delete m_JackClient; m_JackClient=NULL; + return true; } PluginInfo &JackPlugin::Initialise(const HostInfo *Host) @@ -519,6 +537,8 @@ void JackPlugin::Execute() void JackPlugin::ExecuteCommands() { + if (m_IsDead) return; + bool commandwaiting = m_AudioCH->IsCommandWaiting(); int command = (commandwaiting)?(int)m_AudioCH->GetCommand():0; diff --git a/SpiralSound/Plugins/JackPlugin/JackPlugin.h b/SpiralSound/Plugins/JackPlugin/JackPlugin.h index c9b052d..7b00071 100644 --- a/SpiralSound/Plugins/JackPlugin/JackPlugin.h +++ b/SpiralSound/Plugins/JackPlugin/JackPlugin.h @@ -126,6 +126,8 @@ public: virtual void Execute(); virtual void ExecuteCommands(); + + virtual bool Kill(); virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSynthModular.C b/SpiralSynthModular.C index c1b370a..9c9d240 100644 --- a/SpiralSynthModular.C +++ b/SpiralSynthModular.C @@ -115,7 +115,11 @@ void SynthModular::ClearUp() for(map::iterator i=m_DeviceWinMap.begin(); i!=m_DeviceWinMap.end(); i++) { - if (i->second->m_Device->Kill()); + //Stop processing of audio if any + if (i->second->m_Device) + { + if (i->second->m_Device->Kill()); + } i->second->m_DeviceGUI->Clear(); if (i->second->m_DeviceGUI->GetPluginWindow())