From fc230733aed9ec2f17764da16cff45cb163a364b Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Tue, 23 Sep 2014 11:21:44 +0100 Subject: [PATCH] Ignore blockingSendMessage calls after release. Previously we'd end up blocking forever in this case, which is the worst thing we could do :). We could either throw an exception or just print a warning. Printing a warning is more in line with what other methods do (Handler prints a "sending message to dead thread" warning). --- .../exoplayer/ExoPlayerImplInternal.java | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java b/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java index 1aaac4ebcf..0184ea9956 100644 --- a/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java +++ b/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java @@ -158,6 +158,10 @@ import java.util.List; public synchronized void blockingSendMessage(ExoPlayerComponent target, int messageType, Object message) { + if (released) { + Log.w(TAG, "Sent message(" + messageType + ") after release. Message ignored."); + return; + } int messageNumber = customMessagesSent++; handler.obtainMessage(MSG_CUSTOM, messageType, 0, Pair.create(target, message)).sendToTarget(); while (customMessagesProcessed <= messageNumber) { @@ -170,17 +174,18 @@ import java.util.List; } public synchronized void release() { - if (!released) { - handler.sendEmptyMessage(MSG_RELEASE); - while (!released) { - try { - wait(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - internalPlaybackThread.quit(); + if (released) { + return; } + handler.sendEmptyMessage(MSG_RELEASE); + while (!released) { + try { + wait(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + internalPlaybackThread.quit(); } @Override