Make the name field const. (g_signal_newv): Don't keep an unnecessary
authorMatthias Clasen <mclasen@redhat.com>
Mon, 5 Sep 2005 19:23:32 +0000 (19:23 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Mon, 5 Sep 2005 19:23:32 +0000 (19:23 +0000)
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.

gobject/ChangeLog
gobject/gsignal.c

index 58b5190..dd3c2af 100644 (file)
@@ -1,3 +1,10 @@
+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.
index 2366c8d..a637e8e 100644 (file)
@@ -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;
 }