From 4d7f66f2143512b79fcdfd0bfb7aec6cd2b78983 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 6 Feb 2023 18:00:29 +0100 Subject: [PATCH] gmessages: use g_atomic_pointer to access handlers for g_print()/g_printerr() It seems unnecessary to use the mutex to get/set a single pointer. --- glib/gmessages.c | 30 ++++++------------------------ 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/glib/gmessages.c b/glib/gmessages.c index aa22a84b4..541b08130 100644 --- a/glib/gmessages.c +++ b/glib/gmessages.c @@ -3310,14 +3310,8 @@ g_log_default_handler (const gchar *log_domain, GPrintFunc g_set_print_handler (GPrintFunc func) { - GPrintFunc old_print_func; - - g_mutex_lock (&g_messages_lock); - old_print_func = glib_print_func; - glib_print_func = func ? func : g_default_print_func; - g_mutex_unlock (&g_messages_lock); - - return old_print_func; + return g_atomic_pointer_exchange (&glib_print_func, + func ? func : g_default_print_func); } static void @@ -3414,10 +3408,7 @@ g_print (const gchar *format, string = format_string (format, args, &free_me); va_end (args); - g_mutex_lock (&g_messages_lock); - local_glib_print_func = glib_print_func; - g_mutex_unlock (&g_messages_lock); - + local_glib_print_func = g_atomic_pointer_get (&glib_print_func); local_glib_print_func (string); g_free (free_me); } @@ -3448,14 +3439,8 @@ g_print (const gchar *format, GPrintFunc g_set_printerr_handler (GPrintFunc func) { - GPrintFunc old_printerr_func; - - g_mutex_lock (&g_messages_lock); - old_printerr_func = glib_printerr_func; - glib_printerr_func = func ? func : g_default_printerr_func; - g_mutex_unlock (&g_messages_lock); - - return old_printerr_func; + return g_atomic_pointer_exchange (&glib_printerr_func, + func ? func : g_default_printerr_func); } /** @@ -3487,10 +3472,7 @@ g_printerr (const gchar *format, string = format_string (format, args, &free_me); va_end (args); - g_mutex_lock (&g_messages_lock); - local_glib_printerr_func = glib_printerr_func; - g_mutex_unlock (&g_messages_lock); - + local_glib_printerr_func = g_atomic_pointer_get (&glib_printerr_func); local_glib_printerr_func (string); g_free (free_me); }