mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-21 16:38:54 +02:00
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
This commit is contained in:
@@ -2652,13 +2652,15 @@ g_type_class_ref (GType type)
|
|||||||
*/
|
*/
|
||||||
if (!node->data->class.class) /* class uninitialized */
|
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;
|
GTypeClass *pclass = ptype ? g_type_class_ref (ptype) : NULL;
|
||||||
G_WRITE_LOCK (&type_rw_lock);
|
G_WRITE_LOCK (&type_rw_lock);
|
||||||
if (node->data->class.class) /* class was initialized during parent class initialization? */
|
if (node->data->class.class) /* class was initialized during parent class initialization? */
|
||||||
INVALID_RECURSION ("g_type_plugin_*", node->plugin, NODE_NAME (node));
|
INVALID_RECURSION ("g_type_plugin_*", node->plugin, NODE_NAME (node));
|
||||||
type_class_init_Wm (node, pclass);
|
type_class_init_Wm (node, pclass);
|
||||||
G_WRITE_UNLOCK (&type_rw_lock);
|
G_WRITE_UNLOCK (&type_rw_lock);
|
||||||
|
if (pclass)
|
||||||
|
g_type_class_unref (pclass);
|
||||||
}
|
}
|
||||||
g_static_rec_mutex_unlock (&class_init_rec_mutex);
|
g_static_rec_mutex_unlock (&class_init_rec_mutex);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user