diff options
author | Jonas Ådahl <jadahl@gmail.com> | 2017-03-10 16:29:11 +0800 |
---|---|---|
committer | Jonas Ådahl <jadahl@gmail.com> | 2017-03-11 09:16:33 +0800 |
commit | db14e6099e437b64e7c691663f7218c69601f9d9 (patch) | |
tree | f0cb0857ceb61149f5b391346911ff2980645b3d /src/backends/native/meta-backend-native.c | |
parent | 5aa02c0378199609f1ee42eb8645108ae06e73a0 (diff) | |
download | mutter-db14e6099e437b64e7c691663f7218c69601f9d9.tar.gz |
monitor-manager-kms: Don't listen on hotplugs when paused
When mutter is paused (i.e. not the DRM master), stop listening on
hotplug events. Instead read the current state and set modes when
resumed.
This avoids a race condition in the drm API which currently only
manages to properly deal with one application querying the EDID state
at the same time when there are multiple mutter instances running at
the same time (e.g. gnome-shell driving gdm at the same time as
gnome-shell as the session instance).
https://bugzilla.gnome.org/show_bug.cgi?id=779837
Diffstat (limited to 'src/backends/native/meta-backend-native.c')
-rw-r--r-- | src/backends/native/meta-backend-native.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/backends/native/meta-backend-native.c b/src/backends/native/meta-backend-native.c index 22312d75f..3cd1d119d 100644 --- a/src/backends/native/meta-backend-native.c +++ b/src/backends/native/meta-backend-native.c @@ -537,21 +537,31 @@ meta_activate_session (void) void meta_backend_native_pause (MetaBackendNative *native) { + MetaBackend *backend = META_BACKEND (native); + MetaMonitorManager *monitor_manager = + meta_backend_get_monitor_manager (backend); + MetaMonitorManagerKms *monitor_manager_kms = + META_MONITOR_MANAGER_KMS (monitor_manager); + clutter_evdev_release_devices (); clutter_egl_freeze_master_clock (); + + meta_monitor_manager_kms_pause (monitor_manager_kms); } void meta_backend_native_resume (MetaBackendNative *native) { MetaBackend *backend = META_BACKEND (native); - MetaRenderer *renderer; + MetaMonitorManager *monitor_manager = + meta_backend_get_monitor_manager (backend); + MetaMonitorManagerKms *monitor_manager_kms = + META_MONITOR_MANAGER_KMS (monitor_manager); MetaCursorRenderer *cursor_renderer; MetaCursorRendererNative *cursor_renderer_native; ClutterActor *stage; MetaIdleMonitor *idle_monitor; - renderer = meta_backend_get_renderer (backend); - meta_renderer_native_queue_modes_reset (META_RENDERER_NATIVE (renderer)); + meta_monitor_manager_kms_resume (monitor_manager_kms); clutter_evdev_reclaim_devices (); clutter_egl_thaw_master_clock (); |