[mutter] clutter: Remove multi thread mutexes



commit de99dd7eb6555836611f7c93343410e7cbd67aba
Author: Jonas Ådahl <jadahl gmail com>
Date:   Sat May 23 22:50:43 2020 +0200

    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/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 0da859d600..d052b14744 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 a6dd3fbc02..0318389667 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 a333d1453c..a71eac2526 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 fa984fd1b3..d561e322af 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 19da2235b8..6aed4ed3f0 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;
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]