const GTypeInfo *info,
const GTypeValueTable *value_table);
static inline void type_data_ref_Wm (TypeNode *node);
-static inline void type_data_unref_WmREC (TypeNode *node,
+static inline void type_data_unref_U (TypeNode *node,
gboolean uncached);
static void type_data_last_unref_Wm (TypeNode * node,
gboolean uncached);
G_WRITE_UNLOCK (&type_rw_lock);
g_type_plugin_unuse (iholder->plugin);
+ type_data_unref_U (iface, FALSE);
G_WRITE_LOCK (&type_rw_lock);
-
- type_data_unref_WmREC (iface, FALSE);
}
}
G_WRITE_UNLOCK (&type_rw_lock);
g_type_plugin_unuse (node->plugin);
- G_WRITE_LOCK (&type_rw_lock);
if (ptype)
- type_data_unref_WmREC (lookup_type_node_I (ptype), FALSE);
+ type_data_unref_U (lookup_type_node_I (ptype), FALSE);
+ G_WRITE_LOCK (&type_rw_lock);
}
}
static inline void
-type_data_unref_WmREC (TypeNode *node,
- gboolean uncached)
+type_data_unref_U (TypeNode *node,
+ gboolean uncached)
{
+ G_WRITE_LOCK (&type_rw_lock);
g_assert (node->data && NODE_REFCOUNT (node) > 0);
if (NODE_REFCOUNT (node) > 1)
node->ref_count -= 1;
type_data_last_unref_Wm (node, uncached);
g_static_rec_mutex_unlock (&class_init_rec_mutex);
}
+ G_WRITE_UNLOCK (&type_rw_lock);
}
/**
g_return_if_fail (g_class != NULL);
node = lookup_type_node_I (class->g_type);
- G_WRITE_LOCK (&type_rw_lock);
- if (node && node->is_classed && node->data &&
- node->data->class.class == class && NODE_REFCOUNT (node) > 0)
- type_data_unref_WmREC (node, FALSE);
+ if (node && node->is_classed && NODE_REFCOUNT (node))
+ type_data_unref_U (node, FALSE);
else
g_warning ("cannot unreference class of invalid (unclassed) type `%s'",
type_descriptive_name_I (class->g_type));
- G_WRITE_UNLOCK (&type_rw_lock);
}
/**
g_return_if_fail (g_class != NULL);
- G_WRITE_LOCK (&type_rw_lock);
node = lookup_type_node_I (class->g_type);
- if (node && node->is_classed && node->data &&
- node->data->class.class == class && NODE_REFCOUNT (node) > 0)
- type_data_unref_WmREC (node, TRUE);
+ if (node && node->is_classed && NODE_REFCOUNT (node))
+ type_data_unref_U (node, TRUE);
else
g_warning ("cannot unreference class of invalid (unclassed) type `%s'",
type_descriptive_name_I (class->g_type));
- G_WRITE_UNLOCK (&type_rw_lock);
}
/**
g_return_if_fail (g_iface != NULL);
node = lookup_type_node_I (vtable->g_type);
- G_WRITE_LOCK (&type_rw_lock);
- if (node && NODE_IS_IFACE (node) &&
- node->data->iface.dflt_vtable == g_iface &&
- NODE_REFCOUNT (node) > 0)
- type_data_unref_WmREC (node, FALSE);
+ if (node && NODE_IS_IFACE (node))
+ type_data_unref_U (node, FALSE);
else
g_warning ("cannot unreference invalid interface default vtable for '%s'",
type_descriptive_name_I (vtable->g_type));
- G_WRITE_UNLOCK (&type_rw_lock);
}
/**