From 8161643a39772e9283f95811c18ac19901e17c65 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 5 Sep 2005 19:23:32 +0000 Subject: [PATCH] Make the name field const. (g_signal_newv): Don't keep an unnecessary 2005-09-05 Matthias Clasen * gsignal.c (struct _SignalNode): Make the name field const. (g_signal_newv): Don't keep an unnecessary extra copy of the signal name around, and don't forget to free the name if an existing node is reused. --- gobject/ChangeLog | 7 +++++++ gobject/gsignal.c | 13 ++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/gobject/ChangeLog b/gobject/ChangeLog index 58b5190..dd3c2af 100644 --- a/gobject/ChangeLog +++ b/gobject/ChangeLog @@ -1,3 +1,10 @@ +2005-09-05 Matthias Clasen + + * gsignal.c (struct _SignalNode): Make the name field const. + (g_signal_newv): Don't keep an unnecessary extra copy of the + signal name around, and don't forget to free the name if + an existing node is reused. + 2005-08-31 Matthias Clasen * gobject.c (g_object_do_class_init): Intern the signal name. diff --git a/gobject/gsignal.c b/gobject/gsignal.c index 2366c8d..a637e8e 100644 --- a/gobject/gsignal.c +++ b/gobject/gsignal.c @@ -175,7 +175,7 @@ struct _SignalNode /* permanent portion */ guint signal_id; GType itype; - gchar *name; + const gchar *name; guint destroyed : 1; /* reinitializable portion */ @@ -1123,14 +1123,14 @@ G_CONST_RETURN gchar* g_signal_name (guint signal_id) { SignalNode *node; - gchar *name; + const gchar *name; SIGNAL_LOCK (); node = LOOKUP_SIGNAL_NODE (signal_id); name = node ? node->name : NULL; SIGNAL_UNLOCK (); - return name; + return (char*) name; } void @@ -1356,8 +1356,9 @@ g_signal_newv (const gchar *signal_name, key.quark = g_quark_from_string (node->name); key.signal_id = signal_id; g_signal_key_bsa = g_bsearch_array_insert (g_signal_key_bsa, &g_signal_key_bconfig, &key); - g_strdelimit (node->name, "_", '-'); - key.quark = g_quark_from_static_string (node->name); + g_strdelimit (name, "_", '-'); + node->name = g_intern_string (name); + key.quark = g_quark_from_string (name); g_signal_key_bsa = g_bsearch_array_insert (g_signal_key_bsa, &g_signal_key_bconfig, &key); } node->destroyed = FALSE; @@ -1388,6 +1389,8 @@ g_signal_newv (const gchar *signal_name, } SIGNAL_UNLOCK (); + g_free (name); + return signal_id; } -- 2.7.4