From 030f52b41bb5ae2da5d8e1659af50c58435da57b Mon Sep 17 00:00:00 2001 From: tonihei Date: Mon, 9 Oct 2017 05:51:37 -0700 Subject: [PATCH] Wait for HandlerThread to terminate after calling quit. Calling HandlerThread.quit() or .quitSafely() doesn't immediately terminate the thread. It just instructs the Looper not to accept any new messages and to terminate at the next opportunity. Added a HandlerThread.join() everywhere where the intention is to close and release all resources and to stop all threads. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=171525241 --- .../google/android/exoplayer2/ExoPlayerImplInternal.java | 2 +- .../android/exoplayer2/testutil/FakeSimpleExoPlayer.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java index 765b2a7634..a0ca448de7 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java @@ -304,7 +304,6 @@ import java.io.IOException; // Restore the interrupted status. Thread.currentThread().interrupt(); } - internalPlaybackThread.quit(); } public Looper getPlaybackLooper() { @@ -840,6 +839,7 @@ import java.io.IOException; resetInternal(true); loadControl.onReleased(); setState(Player.STATE_IDLE); + internalPlaybackThread.quit(); synchronized (this) { released = true; notifyAll(); diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeSimpleExoPlayer.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeSimpleExoPlayer.java index b56c299e78..70c0f84051 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeSimpleExoPlayer.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeSimpleExoPlayer.java @@ -212,9 +212,17 @@ public class FakeSimpleExoPlayer extends SimpleExoPlayer { } @Override + @SuppressWarnings("ThreadJoinLoop") public void release() { stop(); playbackThread.quitSafely(); + while (playbackThread.isAlive()) { + try { + playbackThread.join(); + } catch (InterruptedException e) { + // Ignore interrupt. + } + } } @Override