mirror of
https://github.com/brl/mutter.git
synced 2024-12-22 11:02:05 +00:00
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
This commit is contained in:
parent
34be97d855
commit
de99dd7eb6
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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 = {
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user