Closed
Description
Describe the bug
Following a traffic channel teardown, the executor continues to process remaining samples in the buffer and the decoder(s) are potentially in a bad state because the previous executor run cycle was aborted immediately after a message was published downstream.
Expected behavior
The decoder module(s) should incorporate a boolean flag that gets set when the module is started/stopped so that the decoder can check this flag before sending each sample to the decoder ... allowing the run to abort without sending further samples for processing.
Application Log
20230624 125602.384 [sdrtrunk polyphase channel thread 1] ERROR i.g.d.sample.Broadcaster - Error while broadcasting [class io.github.dsheirer.dsp.symbol.Dibit] to listeners [Log Suppress 1/5] [469MB/674MB 69%]
java.lang.NullPointerException: Cannot invoke "io.github.dsheirer.module.decode.p25.phase1.P25P1DataUnitID.getMessageLength()" because "this.mDataUnitID" is null
at io.github.dsheirer.module.decode.p25.phase1.P25P1MessageFramer.dispatchMessage(P25P1MessageFramer.java:334)
at io.github.dsheirer.module.decode.p25.phase1.P25P1MessageFramer.receive(P25P1MessageFramer.java:204)
at io.github.dsheirer.module.decode.p25.phase1.P25P1MessageFramer.receive(P25P1MessageFramer.java:70)
at io.github.dsheirer.sample.Broadcaster.broadcast(Broadcaster.java:128)
at io.github.dsheirer.sample.Broadcaster.receive(Broadcaster.java:52)
at io.github.dsheirer.dsp.psk.PSKDemodulator.broadcast(PSKDemodulator.java:61)
at io.github.dsheirer.dsp.psk.DQPSKGardnerDemodulator.calculateSymbol(DQPSKGardnerDemodulator.java:88)
at io.github.dsheirer.dsp.psk.PSKDemodulator.receive(PSKDemodulator.java:117)
at io.github.dsheirer.dsp.psk.PSKDemodulator.receive(PSKDemodulator.java:93)
at io.github.dsheirer.module.decode.p25.phase1.P25P1DecoderLSM.receive(P25P1DecoderLSM.java:116)
at io.github.dsheirer.module.decode.p25.phase1.P25P1DecoderLSM.receive(P25P1DecoderLSM.java:39)
at io.github.dsheirer.sample.Broadcaster.broadcast(Broadcaster.java:128)
at io.github.dsheirer.sample.Broadcaster.receive(Broadcaster.java:52)
at io.github.dsheirer.dsp.filter.channelizer.PolyphaseChannelSource.receive(PolyphaseChannelSource.java:143)
at io.github.dsheirer.dsp.filter.channelizer.PolyphaseChannelSource.receive(PolyphaseChannelSource.java:40)
at io.github.dsheirer.dsp.filter.channelizer.output.TwoChannelOutputProcessor.process(TwoChannelOutputProcessor.java:124)
at io.github.dsheirer.dsp.filter.channelizer.output.ChannelOutputProcessor.lambda$new$0(ChannelOutputProcessor.java:58)
at io.github.dsheirer.util.Dispatcher.process(Dispatcher.java:182)
at io.github.dsheirer.util.Dispatcher$ProcessorWithHeartbeat.run(Dispatcher.java:224)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)