diff --git a/src/backends/native/meta-thread-impl.c b/src/backends/native/meta-thread-impl.c index 763233739..cae291393 100644 --- a/src/backends/native/meta-thread-impl.c +++ b/src/backends/native/meta-thread-impl.c @@ -27,6 +27,15 @@ #define META_THREAD_IMPL_TERMINATE ((gpointer) 1) +enum +{ + RESET, + + N_SIGNALS +}; + +static guint signals[N_SIGNALS]; + enum { PROP_0, @@ -252,6 +261,14 @@ meta_thread_impl_class_init (MetaThreadImplClass *klass) G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, N_PROPS, obj_props); + + signals[RESET] = + g_signal_new ("reset", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, NULL, + G_TYPE_NONE, 0); } static void @@ -517,6 +534,7 @@ meta_thread_impl_dispatch (MetaThreadImpl *thread_impl) if (task == META_THREAD_IMPL_TERMINATE) { + g_signal_emit (thread_impl, signals[RESET], 0); if (priv->loop) g_main_loop_quit (priv->loop); return 0; diff --git a/src/backends/native/meta-thread.c b/src/backends/native/meta-thread.c index 5ca35b7da..d1a1f9e95 100644 --- a/src/backends/native/meta-thread.c +++ b/src/backends/native/meta-thread.c @@ -534,6 +534,7 @@ finalize_thread_user (MetaThread *thread) { MetaThreadPrivate *priv = meta_thread_get_instance_private (thread); + meta_thread_impl_terminate (priv->impl); while (meta_thread_impl_dispatch (priv->impl) > 0); unwrap_main_context (thread, meta_thread_impl_get_main_context (priv->impl)); }