mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Don't block on a dead thread when waiting for messages.
PiperOrigin-RevId: 271983192
This commit is contained in:
parent
7c199eb1ad
commit
9cc927bc64
1 changed files with 11 additions and 3 deletions
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
.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;
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
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 {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue