diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/Loader.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/Loader.java index bd70150573..9e495f42bf 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/Loader.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/Loader.java @@ -380,7 +380,13 @@ public final class Loader implements LoaderErrorThrower { callback.onLoadCanceled(loadable, nowMs, durationMs, false); break; case MSG_END_OF_SOURCE: - callback.onLoadCompleted(loadable, nowMs, durationMs); + try { + callback.onLoadCompleted(loadable, nowMs, durationMs); + } catch (RuntimeException e) { + // This should never happen, but handle it anyway. + Log.e(TAG, "Unexpected exception handling load completed", e); + fatalError = new UnexpectedLoaderException(e); + } break; case MSG_IO_EXCEPTION: currentError = (IOException) msg.obj; @@ -392,6 +398,9 @@ public final class Loader implements LoaderErrorThrower { start(getRetryDelayMillis()); } break; + default: + // Never happens. + break; } }