diff --git a/clutter/clutter-main.c b/clutter/clutter-main.c index 7d4d8159a..1e1efb340 100644 --- a/clutter/clutter-main.c +++ b/clutter/clutter-main.c @@ -34,7 +34,7 @@ * Clutter is thread-aware: all operations * performed by Clutter are assumed to be under the big Clutter lock, * which is created when the threading is initialized through - * clutter_init(). + * clutter_threads_init(). * * Thread Initialization * The code below shows how to correctly initialize Clutter @@ -44,6 +44,12 @@ * int * main (int argc, char *argv[]) * { + * /* initialize GLib's threading support */ + * g_thread_init (NULL); + * + * /* initialize Clutter's threading support */ + * clutter_threads_init (); + * * /* initialize Clutter */ * clutter_init (&argc, &argv); * @@ -910,6 +916,18 @@ clutter_main (void) CLUTTER_TIMER_STOP (uprof_get_mainloop_context (), mainloop_timer); } +static void +clutter_threads_impl_lock (void) +{ + g_mutex_lock (&clutter_threads_mutex); +} + +static void +clutter_threads_impl_unlock (void) +{ + g_mutex_unlock (&clutter_threads_mutex); +} + /** * clutter_threads_init: * @@ -924,13 +942,15 @@ clutter_main (void) * It is safe to call this function multiple times. * * Since: 0.4 - * - * Deprecated: 1.10: This function does not do anything. Threading support - * is initialized when Clutter is initialized. */ void clutter_threads_init (void) { + if (clutter_threads_lock == NULL) + clutter_threads_lock = clutter_threads_impl_lock; + + if (clutter_threads_unlock == NULL) + clutter_threads_unlock = clutter_threads_impl_unlock; } /** @@ -2584,9 +2604,6 @@ clutter_base_init (void) /* initialise GLib type system */ g_type_init (); - - /* initialise the Big Clutter Lockā„¢ if necessary */ - clutter_threads_init_default (); } } diff --git a/clutter/clutter-main.h b/clutter/clutter-main.h index a50405ad1..3d9da1799 100644 --- a/clutter/clutter-main.h +++ b/clutter/clutter-main.h @@ -110,11 +110,7 @@ gulong clutter_get_timestamp (void); gboolean clutter_get_accessibility_enabled (void); /* Threading functions */ -#if !defined(CLUTTER_DISABLE_DEPRECATED) || defined(CLUTTER_COMPILATION) -CLUTTER_DEPRECATED void clutter_threads_init (void); -#endif - void clutter_threads_enter (void); void clutter_threads_leave (void); void clutter_threads_set_lock_functions (GCallback enter_fn, diff --git a/tests/interactive/test-texture-async.c b/tests/interactive/test-texture-async.c index 20d802b24..7e09f3642 100644 --- a/tests/interactive/test-texture-async.c +++ b/tests/interactive/test-texture-async.c @@ -120,6 +120,8 @@ test_texture_async_main (int argc, char *argv[]) { gchar *path; + clutter_threads_init (); + if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) return 1; @@ -138,9 +140,7 @@ test_texture_async_main (int argc, char *argv[]) task, path, cleanup_task); - clutter_threads_enter (); clutter_main (); - clutter_threads_leave (); g_free (path); diff --git a/tests/interactive/test-texture-material.c b/tests/interactive/test-texture-material.c index 4886ce03a..867711f79 100644 --- a/tests/interactive/test-texture-material.c +++ b/tests/interactive/test-texture-material.c @@ -10,6 +10,8 @@ test_texture_material_main (int argc, char *argv[]) ClutterLayoutManager *manager; int i; + g_thread_init (NULL); + clutter_threads_init (); if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) return 1; diff --git a/tests/interactive/test-threads.c b/tests/interactive/test-threads.c index 01ca8a766..5bfab8464 100644 --- a/tests/interactive/test-threads.c +++ b/tests/interactive/test-threads.c @@ -209,6 +209,8 @@ test_threads_main (int argc, char *argv[]) { 400, 150 } }; + g_thread_init (NULL); + clutter_threads_init (); if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) return 1;