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