From 6adce628b3f1752c7885f0569eddd087f5874c74 Mon Sep 17 00:00:00 2001 From: nebogeo Date: Thu, 5 Dec 2002 00:54:04 +0000 Subject: [PATCH] fixed a crash that could occur when deleting plugins --- SpiralSound/Plugins/JackPlugin/JackPlugin.C | 14 +++++++------- SpiralSynthModular.C | 9 +++++---- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/SpiralSound/Plugins/JackPlugin/JackPlugin.C b/SpiralSound/Plugins/JackPlugin/JackPlugin.C index 7e43c15..bc328a3 100644 --- a/SpiralSound/Plugins/JackPlugin/JackPlugin.C +++ b/SpiralSound/Plugins/JackPlugin/JackPlugin.C @@ -401,8 +401,8 @@ PluginInfo &JackPlugin::Initialise(const HostInfo *Host) SpiralGUIType *JackPlugin::CreateGUI() { return new JackPluginGUI(m_PluginInfo.Width, - m_PluginInfo.Height, - this,m_AudioCH,m_HostInfo); + m_PluginInfo.Height, + this,m_AudioCH,m_HostInfo); } void JackPlugin::Execute() @@ -442,10 +442,10 @@ void JackPlugin::ExecuteCommands() { switch (m_AudioCH->GetCommand()) { - /*case ATTACH : Attach(); break; - case DETACH : Detach(); break; - case CONNECTINPUT : pJack->ConnectInput(m_GUIArgs.Num,m_GUIArgs.Port); break; - case CONNECTOUTPUT : pJack->ConnectOutput(m_GUIArgs.Num,m_GUIArgs.Port); break; */ + //case ATTACH : Attach(); break; + //case DETACH : Detach(); break; + //case CONNECTINPUT : pJack->ConnectInput(m_GUIArgs.Num,m_GUIArgs.Port); break; + //case CONNECTOUTPUT : pJack->ConnectOutput(m_GUIArgs.Num,m_GUIArgs.Port); break; case UPDATE_NAMES : { int c=0; @@ -475,5 +475,5 @@ void JackPlugin::ExecuteCommands() default : break; } } - m_Connected=JackClient::Get()->IsAttached(); + m_Connected=JackClient::Get()->IsAttached(); } diff --git a/SpiralSynthModular.C b/SpiralSynthModular.C index 9d424fb..55c5c45 100644 --- a/SpiralSynthModular.C +++ b/SpiralSynthModular.C @@ -116,6 +116,7 @@ void SynthModular::ClearUp() // deleted by Canvas::Remove()? seems to cause random crashes //delete i->second->m_DeviceGUI; delete i->second->m_Device; + i->second->m_Device=NULL; } m_Canvas->Clear(); @@ -197,6 +198,7 @@ void SynthModular::UpdatePluginGUIs() if (i->second->m_Device) { delete i->second->m_Device; + i->second->m_Device=NULL; } if (i->second->m_DeviceGUI->GetPluginWindow()) @@ -1089,8 +1091,7 @@ inline void SynthModular::cb_Connection_i(Fl_Canvas* o, void* v) sprintf(num,"%d,%d",Wire->InputID,Wire->InputPort); SpiralInfo::Alert("Warning: Connection problem - can't find source input "+string(num)); return; - } - + } } void SynthModular::cb_Connection(Fl_Canvas* o, void* v) {((SynthModular*)(o->user_data()))->cb_Connection_i(o,v);} @@ -1111,9 +1112,9 @@ inline void SynthModular::cb_Unconnect_i(Fl_Canvas* o, void* v) return; } - if (!di->second->m_Device->SetInput(Wire->InputPort,NULL)) + SpiralPlugin *Plugin=di->second->m_Device; + if (Plugin && !Plugin->SetInput(Wire->InputPort,NULL)) { cerr<<"Can't find destination device's Input"<user_data()))->cb_Unconnect_i(o,v);}