Synchronize access to DisplayManager

The DisplayManager and its method getDisplayInfo() may be used from both
the Controller thread and the video (main) thread.

PR #6009 <https://github.com/Genymobile/scrcpy/pull/6009>
This commit is contained in:
Romain Vimont 2025-05-02 23:03:15 +02:00
commit 7a3fe830d4
2 changed files with 4 additions and 2 deletions

View file

@ -115,7 +115,8 @@ public final class DisplayManager {
return flags;
}
private Method getGetDisplayInfoMethod() throws NoSuchMethodException {
// getDisplayInfo() may be used from both the Controller thread and the video (main) thread
private synchronized Method getGetDisplayInfoMethod() throws NoSuchMethodException {
if (getDisplayInfoMethod == null) {
getDisplayInfoMethod = manager.getClass().getMethod("getDisplayInfo", int.class);
}

View file

@ -54,7 +54,8 @@ public final class ServiceManager {
return windowManager;
}
public static DisplayManager getDisplayManager() {
// The DisplayManager may be used from both the Controller thread and the video (main) thread
public static synchronized DisplayManager getDisplayManager() {
if (displayManager == null) {
displayManager = DisplayManager.create();
}