[glib/glib-2-22] GTypeModule derived class unref does not unload plugin



commit 7acedea49c039609171b3ac5ffcb4ff0898e17e6
Author: Cody Russell <bratsche gnome org>
Date:   Wed Oct 14 21:24:30 2009 -0500

    GTypeModule derived class unref does not unload plugin
    
    Correctly unref the pclass. Patch by Chris Wilson and Tim Janik.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=350200

 gobject/gtype.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)
---
diff --git a/gobject/gtype.c b/gobject/gtype.c
index c6dff7f..d582242 100644
--- a/gobject/gtype.c
+++ b/gobject/gtype.c
@@ -2652,13 +2652,15 @@ g_type_class_ref (GType type)
    */
   if (!node->data->class.class) /* class uninitialized */
     {
-      /* acquire reference on parent class */
+      /* we need an initialized parent class for initializing derived classes */
       GTypeClass *pclass = ptype ? g_type_class_ref (ptype) : NULL;
       G_WRITE_LOCK (&type_rw_lock);
       if (node->data->class.class) /* class was initialized during parent class initialization? */
         INVALID_RECURSION ("g_type_plugin_*", node->plugin, NODE_NAME (node));
       type_class_init_Wm (node, pclass);
       G_WRITE_UNLOCK (&type_rw_lock);
+      if (pclass)
+        g_type_class_unref (pclass);
     }
   g_static_rec_mutex_unlock (&class_init_rec_mutex);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]