Merge pull request #12688 from JosJuice/android-alert-synchronize

Android: Fix race condition in displayAlertMsg
This commit is contained in:
Admiral H. Curtiss
2024-04-13 01:40:30 +02:00
committed by GitHub

View File

@ -21,6 +21,7 @@ import org.dolphinemu.dolphinemu.utils.Log;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.concurrent.Semaphore;
/** /**
* Class which contains methods that interact * Class which contains methods that interact
@ -28,7 +29,7 @@ import java.util.LinkedHashMap;
*/ */
public final class NativeLibrary public final class NativeLibrary
{ {
private static final Object sAlertMessageLock = new Object(); private static final Semaphore sAlertMessageSemaphore = new Semaphore(0);
private static boolean sIsShowingAlertMessage = false; private static boolean sIsShowingAlertMessage = false;
private static WeakReference<EmulationActivity> sEmulationActivity = new WeakReference<>(null); private static WeakReference<EmulationActivity> sEmulationActivity = new WeakReference<>(null);
@ -491,16 +492,13 @@ public final class NativeLibrary
}); });
// Wait for the lock to notify that it is complete. // Wait for the lock to notify that it is complete.
synchronized (sAlertMessageLock)
{
try try
{ {
sAlertMessageLock.wait(); sAlertMessageSemaphore.acquire();
} }
catch (Exception ignored) catch (InterruptedException ignored)
{ {
} }
}
if (yesNo) if (yesNo)
{ {
@ -519,10 +517,7 @@ public final class NativeLibrary
public static void NotifyAlertMessageLock() public static void NotifyAlertMessageLock()
{ {
synchronized (sAlertMessageLock) sAlertMessageSemaphore.release();
{
sAlertMessageLock.notify();
}
} }
public static void setEmulationActivity(EmulationActivity emulationActivity) public static void setEmulationActivity(EmulationActivity emulationActivity)