From 8d9b08e424f743649ff01e0660a4add817e1f4f1 Mon Sep 17 00:00:00 2001 From: Aaron Cuevas Lopez <aacuelo@teleco.upv.es> Date: Fri, 3 Nov 2017 00:31:28 +0100 Subject: [PATCH] Fix sorter crashing when removing source processor --- Source/Plugins/SpikeSorter/SpikeSorter.cpp | 17 +++++++++++++++-- Source/Plugins/SpikeSorter/SpikeSorter.h | 2 ++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Source/Plugins/SpikeSorter/SpikeSorter.cpp b/Source/Plugins/SpikeSorter/SpikeSorter.cpp index f21edd025..3e770324f 100644 --- a/Source/Plugins/SpikeSorter/SpikeSorter.cpp +++ b/Source/Plugins/SpikeSorter/SpikeSorter.cpp @@ -172,6 +172,7 @@ void SpikeSorter::updateSettings() { mut.enter(); + sorterReady = false; int numChannels = getNumInputs(); if (numChannels > 0) overflowBuffer.setSize(getNumInputs(), overflowBufferSize); @@ -191,7 +192,13 @@ void SpikeSorter::updateSettings() Array<const DataChannel*> chans; for (int c = 0; c < nChans; c++) { - chans.add(getDataChannel(elec->channels[c])); + const DataChannel* ch = getDataChannel(elec->channels[c]); + if (!ch) + { + //not enough channels for the electrodes + return; + } + chans.add(ch); } SpikeChannel* spk = new SpikeChannel(SpikeChannel::typeFromNumChannels(nChans), this, chans); @@ -200,7 +207,7 @@ void SpikeSorter::updateSettings() spikeChannelArray.add(spk); } - + sorterReady = true; mut.exit(); } @@ -647,6 +654,12 @@ bool SpikeSorter::enable() { useOverflowBuffer.clear(); + if (!sorterReady) + { + CoreServices::sendStatusMessage("Not enough channels for the configured electrodes"); + std::cout << "SpikeSorter: Not enough channels for the configured electrodes" << std::endl; + return false; + } for (int i = 0; i < electrodes.size(); i++) useOverflowBuffer.add(false); diff --git a/Source/Plugins/SpikeSorter/SpikeSorter.h b/Source/Plugins/SpikeSorter/SpikeSorter.h index c003a1bf3..8f93e89a2 100644 --- a/Source/Plugins/SpikeSorter/SpikeSorter.h +++ b/Source/Plugins/SpikeSorter/SpikeSorter.h @@ -427,6 +427,8 @@ private: // RHD2000Thread* getRhythmAccess(); bool flipSignal; + bool sorterReady{ false }; + Time timer; void addWaveformToSpikeObject(SpikeEvent::SpikeBuffer& s, -- GitLab