From d890c2f48f1ed541781872b3df12abe36a41db6a Mon Sep 17 00:00:00 2001 From: olly Date: Fri, 18 Nov 2016 02:07:17 -0800 Subject: [PATCH] Fix infinite loop -> ANR at end of HLS playbacks continueLoading shouldn't return true unless it's done something. Always returning true if endOfStream was causing CompositeSequenceableLoader.continueLoading to loop forever. It looks like the same issue exists in ChunkSampleStream as well, although I can't seem to provoke DASH or SS playbacks into doing anything bad as a result. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=139559834 --- .../android/exoplayer2/source/chunk/ChunkSampleStream.java | 2 +- .../android/exoplayer2/source/hls/HlsSampleStreamWrapper.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java b/library/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java index bb2f9b214b..6de7c6ec01 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java @@ -251,7 +251,7 @@ public class ChunkSampleStream implements SampleStream, S @Override public boolean continueLoading(long positionUs) { - if (loader.isLoading()) { + if (loadingFinished || loader.isLoading()) { return false; } diff --git a/library/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java b/library/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java index 1bcc7fe878..863b06ec38 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java @@ -329,7 +329,7 @@ import java.util.LinkedList; @Override public boolean continueLoading(long positionUs) { - if (loader.isLoading()) { + if (loadingFinished || loader.isLoading()) { return false; }