+2005-09-05 Matthias Clasen <mclasen@redhat.com>
+
+ * 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 <mclasen@redhat.com>
* gobject.c (g_object_do_class_init): Intern the signal name.
/* permanent portion */
guint signal_id;
GType itype;
- gchar *name;
+ const gchar *name;
guint destroyed : 1;
/* reinitializable portion */
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
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;
}
SIGNAL_UNLOCK ();
+ g_free (name);
+
return signal_id;
}