Skip to content

Commit 4a16df2

Browse files
committed
Fix race condition in the swap logic for scheduled tracks
1 parent ecb0824 commit 4a16df2

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

main/src/main/java/com/sedmelluq/discord/lavaplayer/player/DefaultAudioPlayer.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,10 +167,12 @@ private void stopWithReason(AudioTrackEndReason reason, boolean includeScheduled
167167
}
168168

169169
InternalAudioTrack previousTrack = activeTrack;
170+
boolean swapped = false;
170171

171172
if (scheduledTrack != null) {
172173
activeTrack = scheduledTrack;
173174
scheduledTrack = null;
175+
swapped = true;
174176
} else {
175177
activeTrack = null;
176178
}
@@ -180,7 +182,7 @@ private void stopWithReason(AudioTrackEndReason reason, boolean includeScheduled
180182
dispatchEvent(new TrackEndEvent(this, previousTrack, reason));
181183
}
182184

183-
if (activeTrack != null) {
185+
if (swapped && activeTrack != null) {
184186
dispatchEvent(new TrackStartEvent(this, activeTrack));
185187
}
186188
}
@@ -305,6 +307,7 @@ private void handleTerminator(InternalAudioTrack track) {
305307
activeTrack = null;
306308

307309
boolean failedBeforeLoad = track.getActiveExecutor().failedBeforeLoad();
310+
boolean swapped = false;
308311

309312
AudioTrackEndReason endReason = scheduledTrack != null
310313
? (failedBeforeLoad ? LOAD_FAILED_GAPLESS : FINISHED_GAPLESS)
@@ -313,11 +316,12 @@ private void handleTerminator(InternalAudioTrack track) {
313316
if (scheduledTrack != null) {
314317
activeTrack = scheduledTrack;
315318
scheduledTrack = null;
319+
swapped = true;
316320
}
317321

318322
dispatchEvent(new TrackEndEvent(this, track, endReason));
319323

320-
if (activeTrack != null) {
324+
if (swapped && activeTrack != null) {
321325
dispatchEvent(new TrackStartEvent(this, activeTrack));
322326
}
323327
}

0 commit comments

Comments
 (0)