From f0d9ef99ea1e7b3b9fe4bd1d663114f71cafaaff Mon Sep 17 00:00:00 2001 From: Denny Sheirer Date: Tue, 1 Dec 2020 04:06:03 -0500 Subject: [PATCH] Resolves multi-threading issue in buffer assembler where sample listener is nullified while buffer processing is still in process. (#1005) Co-authored-by: Denny --- .../gui/playlist/channel/DMRConfigurationEditor.java | 1 - .../sample/buffer/ReusableComplexBufferAssembler.java | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/github/dsheirer/gui/playlist/channel/DMRConfigurationEditor.java b/src/main/java/io/github/dsheirer/gui/playlist/channel/DMRConfigurationEditor.java index e64a3057..44886d27 100644 --- a/src/main/java/io/github/dsheirer/gui/playlist/channel/DMRConfigurationEditor.java +++ b/src/main/java/io/github/dsheirer/gui/playlist/channel/DMRConfigurationEditor.java @@ -626,7 +626,6 @@ public class DMRConfigurationEditor extends ChannelConfigurationEditor config = new DecodeConfigDMR(); } -// config.setChannelRotationDelay(getChannelRotationDelaySpinner().getValue()); config.setIgnoreCRCChecksums(getIgnoreCRCChecksumsButton().isSelected()); config.setIgnoreDataCalls(getIgnoreDataCallsButton().isSelected()); config.setTrafficChannelPoolSize(getTrafficChannelPoolSizeSpinner().getValue()); diff --git a/src/main/java/io/github/dsheirer/sample/buffer/ReusableComplexBufferAssembler.java b/src/main/java/io/github/dsheirer/sample/buffer/ReusableComplexBufferAssembler.java index 142da7f5..789358d8 100644 --- a/src/main/java/io/github/dsheirer/sample/buffer/ReusableComplexBufferAssembler.java +++ b/src/main/java/io/github/dsheirer/sample/buffer/ReusableComplexBufferAssembler.java @@ -149,12 +149,14 @@ public class ReusableComplexBufferAssembler */ public void flush() { - if(mListener != null && mBuffer.position() > 0) + Listener listener = mListener; + + if(listener != null && mBuffer.position() > 0) { mBuffer.rewind(); ReusableComplexBuffer reusableComplexBuffer = mReusableComplexBufferQueue.getBuffer(mBufferSize); reusableComplexBuffer.reloadFrom(mBuffer, mCurrentBufferTimestamp); - mListener.receive(reusableComplexBuffer); + listener.receive(reusableComplexBuffer); } mBuffer.rewind();