Commit 9cc927bc by tonihei Committed by Oliver Woodman

Don't block on a dead thread when waiting for messages.

PiperOrigin-RevId: 271983192
parent 7c199eb1
...@@ -210,7 +210,7 @@ import java.util.concurrent.atomic.AtomicBoolean; ...@@ -210,7 +210,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
@Override @Override
public synchronized void sendMessage(PlayerMessage message) { public synchronized void sendMessage(PlayerMessage message) {
if (released) { if (released || !internalPlaybackThread.isAlive()) {
Log.w(TAG, "Ignoring messages sent after release."); Log.w(TAG, "Ignoring messages sent after release.");
message.markAsProcessed(/* isDelivered= */ false); message.markAsProcessed(/* isDelivered= */ false);
return; return;
...@@ -219,6 +219,9 @@ import java.util.concurrent.atomic.AtomicBoolean; ...@@ -219,6 +219,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
} }
public synchronized void setForegroundMode(boolean foregroundMode) { public synchronized void setForegroundMode(boolean foregroundMode) {
if (released || !internalPlaybackThread.isAlive()) {
return;
}
if (foregroundMode) { if (foregroundMode) {
handler.obtainMessage(MSG_SET_FOREGROUND_MODE, /* foregroundMode */ 1, 0).sendToTarget(); handler.obtainMessage(MSG_SET_FOREGROUND_MODE, /* foregroundMode */ 1, 0).sendToTarget();
} else { } else {
...@@ -227,7 +230,7 @@ import java.util.concurrent.atomic.AtomicBoolean; ...@@ -227,7 +230,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
.obtainMessage(MSG_SET_FOREGROUND_MODE, /* foregroundMode */ 0, 0, processedFlag) .obtainMessage(MSG_SET_FOREGROUND_MODE, /* foregroundMode */ 0, 0, processedFlag)
.sendToTarget(); .sendToTarget();
boolean wasInterrupted = false; boolean wasInterrupted = false;
while (!processedFlag.get() && !released) { while (!processedFlag.get()) {
try { try {
wait(); wait();
} catch (InterruptedException e) { } catch (InterruptedException e) {
...@@ -242,7 +245,7 @@ import java.util.concurrent.atomic.AtomicBoolean; ...@@ -242,7 +245,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
} }
public synchronized void release() { public synchronized void release() {
if (released) { if (released || !internalPlaybackThread.isAlive()) {
return; return;
} }
handler.sendEmptyMessage(MSG_RELEASE); handler.sendEmptyMessage(MSG_RELEASE);
...@@ -991,6 +994,11 @@ import java.util.concurrent.atomic.AtomicBoolean; ...@@ -991,6 +994,11 @@ import java.util.concurrent.atomic.AtomicBoolean;
private void sendMessageToTargetThread(final PlayerMessage message) { private void sendMessageToTargetThread(final PlayerMessage message) {
Handler handler = message.getHandler(); Handler handler = message.getHandler();
if (!handler.getLooper().getThread().isAlive()) {
Log.w("TAG", "Trying to send message on a dead thread.");
message.markAsProcessed(/* isDelivered= */ false);
return;
}
handler.post( handler.post(
() -> { () -> {
try { try {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment