summaryrefslogtreecommitdiff
path: root/src/backends/native/meta-backend-native.c
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2017-03-10 16:29:11 +0800
committerJonas Ådahl <jadahl@gmail.com>2017-03-11 09:16:33 +0800
commitdb14e6099e437b64e7c691663f7218c69601f9d9 (patch)
treef0cb0857ceb61149f5b391346911ff2980645b3d /src/backends/native/meta-backend-native.c
parent5aa02c0378199609f1ee42eb8645108ae06e73a0 (diff)
downloadmutter-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.c16
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 ();