From 788d994ad707b632e668e52887ee75a1a6372861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?U=C4=9Fur=20Tafral=C4=B1?= Date: Sat, 11 Jul 2026 11:06:18 +0300 Subject: [PATCH] Fix #2377: add null check for mAudioOutput in processAudioSegments to prevent NPE when no audio outputs present (#2378) Co-authored-by: Claude Sonnet 4.6 --- .../audio/playback/AudioPlaybackManager.java | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/github/dsheirer/audio/playback/AudioPlaybackManager.java b/src/main/java/io/github/dsheirer/audio/playback/AudioPlaybackManager.java index 4d80e11f..79ea7976 100644 --- a/src/main/java/io/github/dsheirer/audio/playback/AudioPlaybackManager.java +++ b/src/main/java/io/github/dsheirer/audio/playback/AudioPlaybackManager.java @@ -189,28 +189,31 @@ public class AudioPlaybackManager implements Listener, IAudioContr } else if(audioSegment.isLinked()) { - mAudioChannelsLock.lock(); - - try + if(mAudioOutput != null) { - for(AudioChannel audioOutput: mAudioOutput.getAudioProvider().getAudioChannels()) + mAudioChannelsLock.lock(); + + try { - if(audioOutput.isLinkedTo(audioSegment)) + for(AudioChannel audioOutput: mAudioOutput.getAudioProvider().getAudioChannels()) { - it.remove(); - audioOutput.play(audioSegment); + if(audioOutput.isLinkedTo(audioSegment)) + { + it.remove(); + audioOutput.play(audioSegment); + } } } - } - finally - { - mAudioChannelsLock.unlock(); + finally + { + mAudioChannelsLock.unlock(); + } } } } //Sort audio segments by playback priority and assign to empty audio outputs - if(!mAudioSegments.isEmpty()) + if(!mAudioSegments.isEmpty() && mAudioOutput != null) { mAudioSegments.sort(mAudioSegmentPrioritySorter); mAudioChannelsLock.lock();