From de99dd7eb6555836611f7c93343410e7cbd67aba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Sat, 23 May 2020 22:50:43 +0200 Subject: [PATCH] clutter: Remove multi thread mutexes The mutexes was used by ClutterTexture's async upload and to match GDK's mutexes on X11. GDK's X11 connection does not share anything with Clutter's, we don't have the Gdk Clutter backend left, and we have already removed ClutterTexture, so lets remove these mutexes as well. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1285 --- clutter/clutter/clutter-main.c | 87 ++----------------- .../clutter/clutter-master-clock-default.c | 10 --- clutter/clutter/clutter-private.h | 5 -- src/backends/native/meta-seat-native.c | 15 +--- src/backends/x11/meta-event-x11.c | 4 - 5 files changed, 6 insertions(+), 115 deletions(-) diff --git a/clutter/clutter/clutter-main.c b/clutter/clutter/clutter-main.c index 0da859d60..d052b1474 100644 --- a/clutter/clutter/clutter-main.c +++ b/clutter/clutter/clutter-main.c @@ -83,10 +83,6 @@ /* main context */ static ClutterMainContext *ClutterCntx = NULL; -G_LOCK_DEFINE_STATIC (ClutterCntx); - -/* main lock and locking/unlocking functions */ -static GMutex clutter_threads_mutex; /* command line options */ static gboolean clutter_is_initialized = FALSE; @@ -145,12 +141,6 @@ static const GDebugKey clutter_paint_debug_keys[] = { { "damage-region", CLUTTER_DEBUG_PAINT_DAMAGE_REGION }, }; -static inline void -clutter_threads_init_default (void) -{ - g_mutex_init (&clutter_threads_mutex); -} - #define ENVIRONMENT_GROUP "Environment" #define DEBUG_GROUP "Debug" @@ -519,11 +509,7 @@ clutter_main (void) main_loops = g_slist_prepend (main_loops, loop); if (g_main_loop_is_running (main_loops->data)) - { - _clutter_threads_release_lock (); - g_main_loop_run (loop); - _clutter_threads_acquire_lock (); - } + g_main_loop_run (loop); main_loops = g_slist_remove (main_loops, loop); @@ -540,13 +526,9 @@ _clutter_threads_dispatch (gpointer data) ClutterThreadsDispatch *dispatch = data; gboolean ret = FALSE; - _clutter_threads_acquire_lock (); - if (!g_source_is_destroyed (g_main_current_source ())) ret = dispatch->func (dispatch->data); - _clutter_threads_release_lock (); - return ret; } @@ -771,40 +753,6 @@ clutter_threads_add_timeout (guint interval, NULL); } -void -_clutter_threads_acquire_lock (void) -{ - g_mutex_lock (&clutter_threads_mutex); -} - -void -_clutter_threads_release_lock (void) -{ - /* we need to trylock here, in case the lock hasn't been acquired; on - * various systems trying to release a mutex that hasn't been acquired - * will cause a run-time error. trylock() will either fail, in which - * case we can release the lock we own; or it will succeeds, in which - * case we need to release the lock we just acquired. so we ignore the - * returned value. - * - * see: https://bugs.gnome.org/679439 - */ - g_mutex_trylock (&clutter_threads_mutex); - g_mutex_unlock (&clutter_threads_mutex); -} - -void -_clutter_context_lock (void) -{ - G_LOCK (ClutterCntx); -} - -void -_clutter_context_unlock (void) -{ - G_UNLOCK (ClutterCntx); -} - gboolean _clutter_context_is_initialized (void) { @@ -814,8 +762,8 @@ _clutter_context_is_initialized (void) return ClutterCntx->is_initialized; } -static ClutterMainContext * -clutter_context_get_default_unlocked (void) +ClutterMainContext * +_clutter_context_get_default (void) { if (G_UNLIKELY (ClutterCntx == NULL)) { @@ -846,20 +794,6 @@ clutter_context_get_default_unlocked (void) return ClutterCntx; } -ClutterMainContext * -_clutter_context_get_default (void) -{ - ClutterMainContext *retval; - - _clutter_context_lock (); - - retval = clutter_context_get_default_unlocked (); - - _clutter_context_unlock (); - - return retval; -} - static gboolean clutter_arg_direction_cb (const char *key, const char *value, @@ -2170,9 +2104,6 @@ clutter_base_init (void) g_type_init (); #endif - /* initialise the Big Clutter Lockā„¢ if necessary */ - clutter_threads_init_default (); - clutter_graphene_init (); } } @@ -2240,9 +2171,7 @@ clutter_threads_remove_repaint_func (guint handle_id) g_return_if_fail (handle_id > 0); - _clutter_context_lock (); - - context = clutter_context_get_default_unlocked (); + context = _clutter_context_get_default (); l = context->repaint_funcs; while (l != NULL) { @@ -2265,8 +2194,6 @@ clutter_threads_remove_repaint_func (guint handle_id) l = l->next; } - - _clutter_context_unlock (); } /** @@ -2365,9 +2292,7 @@ clutter_threads_add_repaint_func_full (ClutterRepaintFlags flags, g_return_val_if_fail (func != NULL, 0); - _clutter_context_lock (); - - context = clutter_context_get_default_unlocked (); + context = _clutter_context_get_default (); repaint_func = g_slice_new (ClutterRepaintFunction); @@ -2381,8 +2306,6 @@ clutter_threads_add_repaint_func_full (ClutterRepaintFlags flags, context->repaint_funcs = g_list_prepend (context->repaint_funcs, repaint_func); - _clutter_context_unlock (); - return repaint_func->id; } diff --git a/clutter/clutter/clutter-master-clock-default.c b/clutter/clutter/clutter-master-clock-default.c index a6dd3fbc0..031838966 100644 --- a/clutter/clutter/clutter-master-clock-default.c +++ b/clutter/clutter/clutter-master-clock-default.c @@ -413,8 +413,6 @@ clutter_clock_prepare (GSource *source, ClutterMasterClockDefault *master_clock = clock_source->master_clock; int delay; - _clutter_threads_acquire_lock (); - if (G_UNLIKELY (clutter_paint_debug_flags & CLUTTER_DEBUG_CONTINUOUS_REDRAW)) { @@ -430,8 +428,6 @@ clutter_clock_prepare (GSource *source, delay = master_clock_next_frame_delay (master_clock); - _clutter_threads_release_lock (); - *timeout = delay; return delay == 0; @@ -444,9 +440,7 @@ clutter_clock_check (GSource *source) ClutterMasterClockDefault *master_clock = clock_source->master_clock; int delay; - _clutter_threads_acquire_lock (); delay = master_clock_next_frame_delay (master_clock); - _clutter_threads_release_lock (); return delay == 0; } @@ -462,8 +456,6 @@ clutter_clock_dispatch (GSource *source, CLUTTER_NOTE (SCHEDULER, "Master clock [tick]"); - _clutter_threads_acquire_lock (); - COGL_TRACE_BEGIN (ClutterMasterClockTick, "Master Clock (tick)"); /* Get the time to use for this frame */ @@ -499,8 +491,6 @@ clutter_clock_dispatch (GSource *source, COGL_TRACE_END (ClutterMasterClockTick); - _clutter_threads_release_lock (); - return TRUE; } diff --git a/clutter/clutter/clutter-private.h b/clutter/clutter/clutter-private.h index a333d1453..a71eac252 100644 --- a/clutter/clutter/clutter-private.h +++ b/clutter/clutter/clutter-private.h @@ -177,11 +177,6 @@ typedef struct gboolean _clutter_threads_dispatch (gpointer data); void _clutter_threads_dispatch_free (gpointer data); -CLUTTER_EXPORT -void _clutter_threads_acquire_lock (void); -CLUTTER_EXPORT -void _clutter_threads_release_lock (void); - ClutterMainContext * _clutter_context_get_default (void); void _clutter_context_lock (void); void _clutter_context_unlock (void); diff --git a/src/backends/native/meta-seat-native.c b/src/backends/native/meta-seat-native.c index fa984fd1b..d561e322a 100644 --- a/src/backends/native/meta-seat-native.c +++ b/src/backends/native/meta-seat-native.c @@ -885,13 +885,9 @@ meta_event_prepare (GSource *source, { gboolean retval; - _clutter_threads_acquire_lock (); - *timeout = -1; retval = clutter_events_pending (); - _clutter_threads_release_lock (); - return retval; } @@ -901,13 +897,9 @@ meta_event_check (GSource *source) MetaEventSource *event_source = (MetaEventSource *) source; gboolean retval; - _clutter_threads_acquire_lock (); - retval = ((event_source->event_poll_fd.revents & G_IO_IN) || clutter_events_pending ()); - _clutter_threads_release_lock (); - return retval; } @@ -1273,8 +1265,6 @@ meta_event_dispatch (GSource *g_source, MetaSeatNative *seat; ClutterEvent *event; - _clutter_threads_acquire_lock (); - seat = source->seat; /* Don't queue more events if we haven't finished handling the previous batch @@ -1299,7 +1289,7 @@ meta_event_dispatch (GSource *g_source, /* Drop events if we don't have any stage to forward them to */ if (!_clutter_input_device_get_stage (input_device)) - goto out; + return TRUE; /* update the device states *before* the event */ event_state = seat->button_state | @@ -1311,9 +1301,6 @@ meta_event_dispatch (GSource *g_source, _clutter_stage_queue_event (event->any.stage, event, FALSE); } -out: - _clutter_threads_release_lock (); - return TRUE; } static GSourceFuncs event_funcs = { diff --git a/src/backends/x11/meta-event-x11.c b/src/backends/x11/meta-event-x11.c index 19da2235b..6aed4ed3f 100644 --- a/src/backends/x11/meta-event-x11.c +++ b/src/backends/x11/meta-event-x11.c @@ -92,8 +92,6 @@ meta_x11_handle_event (XEvent *xevent) result = CLUTTER_X11_FILTER_CONTINUE; - _clutter_threads_acquire_lock (); - backend = clutter_get_default_backend (); event = clutter_event_new (CLUTTER_NOTHING); @@ -135,8 +133,6 @@ out: if (allocated_event) XFreeEventData (xdisplay, &xevent->xcookie); - _clutter_threads_release_lock (); - return result; }