summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2019-09-03 19:12:10 +0200
committerJonas Ådahl <jadahl@gmail.com>2019-09-05 08:03:36 +0000
commit35776c5d29c2e31a15ca44c0377722766b1b67db (patch)
tree5554f10361c3d9b57496a9280b482236c6e4d0b8
parent2f27b8d5fa9cbe3798a74ce804c48f901768720c (diff)
downloadmutter-35776c5d29c2e31a15ca44c0377722766b1b67db.tar.gz
kms: Add assert to check that the main thread is blocked on impl task
This is so that we can have code in impl tasks that pokes at the main context objects. https://gitlab.gnome.org/GNOME/mutter/merge_requests/743
-rw-r--r--src/backends/native/meta-kms-private.h4
-rw-r--r--src/backends/native/meta-kms.c9
2 files changed, 13 insertions, 0 deletions
diff --git a/src/backends/native/meta-kms-private.h b/src/backends/native/meta-kms-private.h
index fa632e1f7..4b6aaee7e 100644
--- a/src/backends/native/meta-kms-private.h
+++ b/src/backends/native/meta-kms-private.h
@@ -55,9 +55,13 @@ GSource * meta_kms_register_fd_in_impl (MetaKms *kms,
gboolean meta_kms_in_impl_task (MetaKms *kms);
+gboolean meta_kms_is_waiting_for_impl_task (MetaKms *kms);
+
#define meta_assert_in_kms_impl(kms) \
g_assert (meta_kms_in_impl_task (kms))
#define meta_assert_not_in_kms_impl(kms) \
g_assert (!meta_kms_in_impl_task (kms))
+#define meta_assert_is_waiting_for_kms_impl_task(kms) \
+ g_assert (meta_kms_is_waiting_for_impl_task (kms))
#endif /* META_KMS_PRIVATE_H */
diff --git a/src/backends/native/meta-kms.c b/src/backends/native/meta-kms.c
index 296e63be8..91b260db3 100644
--- a/src/backends/native/meta-kms.c
+++ b/src/backends/native/meta-kms.c
@@ -154,6 +154,7 @@ struct _MetaKms
MetaKmsImpl *impl;
gboolean in_impl_task;
+ gboolean waiting_for_impl_task;
GList *devices;
@@ -322,7 +323,9 @@ meta_kms_run_impl_task_sync (MetaKms *kms,
gboolean ret;
kms->in_impl_task = TRUE;
+ kms->waiting_for_impl_task = TRUE;
ret = func (kms->impl, user_data, error);
+ kms->waiting_for_impl_task = FALSE;
kms->in_impl_task = FALSE;
return ret;
@@ -440,6 +443,12 @@ meta_kms_in_impl_task (MetaKms *kms)
return kms->in_impl_task;
}
+gboolean
+meta_kms_is_waiting_for_impl_task (MetaKms *kms)
+{
+ return kms->waiting_for_impl_task;
+}
+
static void
meta_kms_update_states_in_impl (MetaKms *kms)
{