From 32105538c5d2a7886a5a9b1d6e6cb849cbf7aaaf Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Sun, 30 Aug 2020 17:35:53 +0200 Subject: [PATCH] lock on the spectrum thread to avoid double start --- owrx/source/__init__.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/owrx/source/__init__.py b/owrx/source/__init__.py index 8720882..fcb176f 100644 --- a/owrx/source/__init__.py +++ b/owrx/source/__init__.py @@ -54,6 +54,7 @@ class SdrSource(ABC): self.clients = [] self.spectrumClients = [] self.spectrumThread = None + self.spectrumLock = threading.Lock() self.process = None self.modificationLock = threading.Lock() self.failed = False @@ -263,22 +264,24 @@ class SdrSource(ABC): self.stop() def addSpectrumClient(self, c): - self.spectrumClients.append(c) - if self.spectrumThread is None: - # local import due to circular depencency - from owrx.fft import SpectrumThread + # local import due to circular depencency + from owrx.fft import SpectrumThread - self.spectrumThread = SpectrumThread(self) - self.spectrumThread.start() + self.spectrumClients.append(c) + with self.spectrumLock: + if self.spectrumThread is None: + self.spectrumThread = SpectrumThread(self) + self.spectrumThread.start() def removeSpectrumClient(self, c): try: self.spectrumClients.remove(c) except ValueError: pass - if not self.spectrumClients and self.spectrumThread is not None: - self.spectrumThread.stop() - self.spectrumThread = None + with self.spectrumLock: + if not self.spectrumClients and self.spectrumThread is not None: + self.spectrumThread.stop() + self.spectrumThread = None def writeSpectrumData(self, data): for c in self.spectrumClients: