Browse Source

BLOCKS API: Fixed a crash when block is connected and disconnected over BT and USB

tags/2021-05-28
jules 8 years ago
parent
commit
1cda7cf13b
1 changed files with 17 additions and 7 deletions
  1. +17
    -7
      modules/juce_blocks_basics/topology/juce_PhysicalTopologySource.cpp

+ 17
- 7
modules/juce_blocks_basics/topology/juce_PhysicalTopologySource.cpp View File

@@ -1232,7 +1232,10 @@ struct PhysicalTopologySource::Internal
~BlockImplementation() ~BlockImplementation()
{ {
if (listenerToMidiConnection != nullptr) if (listenerToMidiConnection != nullptr)
{
config.setDeviceComms (nullptr);
listenerToMidiConnection->removeListener (this); listenerToMidiConnection->removeListener (this);
}
} }
void invalidate() void invalidate()
@@ -1594,32 +1597,32 @@ struct PhysicalTopologySource::Internal
//============================================================================== //==============================================================================
int32 getLocalConfigValue (uint32 item) override int32 getLocalConfigValue (uint32 item) override
{ {
config.setDeviceIndex ((TopologyIndex) getDeviceIndex());
initialiseDeviceIndexAndConnection();
return config.getItemValue ((BlocksProtocol::ConfigItemId) item); return config.getItemValue ((BlocksProtocol::ConfigItemId) item);
} }
void setLocalConfigValue (uint32 item, int32 value) override void setLocalConfigValue (uint32 item, int32 value) override
{ {
config.setDeviceIndex ((TopologyIndex) getDeviceIndex());
initialiseDeviceIndexAndConnection();
config.setItemValue ((BlocksProtocol::ConfigItemId) item, value); config.setItemValue ((BlocksProtocol::ConfigItemId) item, value);
} }
void setLocalConfigRange (uint32 item, int32 min, int32 max) override void setLocalConfigRange (uint32 item, int32 min, int32 max) override
{ {
config.setDeviceIndex ((TopologyIndex) getDeviceIndex());
initialiseDeviceIndexAndConnection();
config.setItemMin ((BlocksProtocol::ConfigItemId) item, min); config.setItemMin ((BlocksProtocol::ConfigItemId) item, min);
config.setItemMax ((BlocksProtocol::ConfigItemId) item, max); config.setItemMax ((BlocksProtocol::ConfigItemId) item, max);
} }
void setLocalConfigItemActive (uint32 item, bool isActive) override void setLocalConfigItemActive (uint32 item, bool isActive) override
{ {
config.setDeviceIndex ((TopologyIndex) getDeviceIndex());
initialiseDeviceIndexAndConnection();
config.setItemActive ((BlocksProtocol::ConfigItemId) item, isActive); config.setItemActive ((BlocksProtocol::ConfigItemId) item, isActive);
} }
bool isLocalConfigItemActive (uint32 item) override bool isLocalConfigItemActive (uint32 item) override
{ {
config.setDeviceIndex ((TopologyIndex) getDeviceIndex());
initialiseDeviceIndexAndConnection();
return config.getItemActive ((BlocksProtocol::ConfigItemId) item); return config.getItemActive ((BlocksProtocol::ConfigItemId) item);
} }
@@ -1636,13 +1639,13 @@ struct PhysicalTopologySource::Internal
ConfigMetaData getLocalConfigMetaData (uint32 item) override ConfigMetaData getLocalConfigMetaData (uint32 item) override
{ {
config.setDeviceIndex ((TopologyIndex) getDeviceIndex());
initialiseDeviceIndexAndConnection();
return config.getMetaData ((BlocksProtocol::ConfigItemId) item); return config.getMetaData ((BlocksProtocol::ConfigItemId) item);
} }
void requestFactoryConfigSync() override void requestFactoryConfigSync() override
{ {
config.setDeviceIndex ((TopologyIndex) getDeviceIndex());
initialiseDeviceIndexAndConnection();
config.requestFactoryConfigSync(); config.requestFactoryConfigSync();
} }
@@ -1755,6 +1758,12 @@ struct PhysicalTopologySource::Internal
bool isStillConnected = true; bool isStillConnected = true;
bool isMaster = false; bool isMaster = false;
void initialiseDeviceIndexAndConnection()
{
config.setDeviceIndex ((TopologyIndex) getDeviceIndex());
config.setDeviceComms (listenerToMidiConnection);
}
const juce::MidiInput* getMidiInput() const const juce::MidiInput* getMidiInput() const
{ {
if (auto c = dynamic_cast<MIDIDeviceConnection*> (detector.getDeviceConnectionFor (*this))) if (auto c = dynamic_cast<MIDIDeviceConnection*> (detector.getDeviceConnectionFor (*this)))
@@ -1795,6 +1804,7 @@ struct PhysicalTopologySource::Internal
juce::ignoreUnused (c); juce::ignoreUnused (c);
listenerToMidiConnection->removeListener (this); listenerToMidiConnection->removeListener (this);
listenerToMidiConnection = nullptr; listenerToMidiConnection = nullptr;
config.setDeviceComms (nullptr);
} }
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BlockImplementation) JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BlockImplementation)


Loading…
Cancel
Save