summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2021-05-26 23:45:04 -0400
committerRay Strode <rstrode@redhat.com>2023-04-12 14:09:20 -0400
commitc4ed3474a5a26914397e5f6d2a816f0ec13ed9a7 (patch)
tree6a020b04a829e043def2b799c9906ce3b1d63a52
parentd7747aa78e795a29458f51fefbe6a972fcec080e (diff)
downloadglib-c4ed3474a5a26914397e5f6d2a816f0ec13ed9a7.tar.gz
gsignal: add g_signal_name_unlocked helper
This function fetches the name of a signal from its id. It's like g_signal_name, but works when the signal lock is held.
-rw-r--r--gobject/gsignal.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/gobject/gsignal.c b/gobject/gsignal.c
index cd5780518..8437846ea 100644
--- a/gobject/gsignal.c
+++ b/gobject/gsignal.c
@@ -205,6 +205,7 @@ static void invalid_closure_notify (gpointer data,
static const gchar * type_debug_name (GType type);
static void node_check_deprecated (const SignalNode *node);
static void node_update_single_va_closure (SignalNode *node);
+static const gchar *g_signal_name_unlocked (guint signal_id);
/* --- structures --- */
@@ -1315,6 +1316,18 @@ g_signal_list_ids (GType itype,
return (guint*) g_array_free (result, FALSE);
}
+static const gchar *
+g_signal_name_unlocked (guint signal_id)
+{
+ SignalNode *node;
+ const gchar *name;
+
+ node = LOOKUP_SIGNAL_NODE (signal_id);
+ name = node ? node->name : NULL;
+
+ return (char*) name;
+}
+
/**
* g_signal_name:
* @signal_id: the signal's identifying number.
@@ -1328,14 +1341,12 @@ g_signal_list_ids (GType itype,
const gchar *
g_signal_name (guint signal_id)
{
- SignalNode *node;
const gchar *name;
-
+
SIGNAL_LOCK ();
- node = LOOKUP_SIGNAL_NODE (signal_id);
- name = node ? node->name : NULL;
+ name = g_signal_name_unlocked (signal_id);
SIGNAL_UNLOCK ();
-
+
return (char*) name;
}