summaryrefslogtreecommitdiff
path: root/libpeas/peas-object-module.c
diff options
context:
space:
mode:
authorSteve Frécinaux <code@istique.net>2010-07-22 15:06:27 +0200
committerSteve Frécinaux <code@istique.net>2010-07-22 15:10:58 +0200
commitfeb6e7b7c08ba2aa811a58472c6531cbb0f7aa50 (patch)
treef2a5324f124d369da7b6ca82664591365aa0bae8 /libpeas/peas-object-module.c
parent664d5e2ad22ac1acc39bdcf9186dc8ce734c0fcf (diff)
downloadlibpeas-feb6e7b7c08ba2aa811a58472c6531cbb0f7aa50.tar.gz
Fix reloading C plugins.
GTypeModule expects all the types to be registered during the g_type_module_use() call. It implies doing the registration within the _load() virtual method, but we did it at a later stage. The warnings (and actual reloading) are fixed by moving the type registration process within the _load() virtual function. https://bugzilla.gnome.org/show_bug.cgi?id=621233
Diffstat (limited to 'libpeas/peas-object-module.c')
-rw-r--r--libpeas/peas-object-module.c31
1 files changed, 12 insertions, 19 deletions
diff --git a/libpeas/peas-object-module.c b/libpeas/peas-object-module.c
index fdad671..1ed79bb 100644
--- a/libpeas/peas-object-module.c
+++ b/libpeas/peas-object-module.c
@@ -68,10 +68,18 @@ struct _PeasObjectModulePrivate {
gchar *path;
gchar *module_name;
- gboolean types_registered : 1;
- gboolean resident : 1;
+ guint resident : 1;
};
+static void
+peas_object_module_register_types (PeasObjectModule *module)
+{
+ g_return_if_fail (PEAS_IS_OBJECT_MODULE (module));
+ g_return_if_fail (module->priv->register_func != NULL);
+
+ module->priv->register_func (module);
+}
+
static gboolean
peas_object_module_load (GTypeModule *gmodule)
{
@@ -124,6 +132,8 @@ peas_object_module_load (GTypeModule *gmodule)
if (module->priv->resident)
g_module_make_resident (module->priv->library);
+ peas_object_module_register_types (module);
+
return TRUE;
}
@@ -275,17 +285,6 @@ peas_object_module_new (const gchar *module_name,
NULL));
}
-void
-peas_object_module_register_types (PeasObjectModule *module)
-{
- g_return_if_fail (PEAS_IS_OBJECT_MODULE (module));
- g_return_if_fail (module->priv->register_func != NULL);
- g_return_if_fail (module->priv->types_registered == FALSE);
-
- module->priv->register_func (module);
- module->priv->types_registered = TRUE;
-}
-
GObject *
peas_object_module_create_object (PeasObjectModule *module,
GType interface,
@@ -297,9 +296,6 @@ peas_object_module_create_object (PeasObjectModule *module,
g_return_val_if_fail (PEAS_IS_OBJECT_MODULE (module), NULL);
- if (!module->priv->types_registered)
- peas_object_module_register_types (module);
-
impls = (InterfaceImplementation *) module->priv->implementations->data;
for (i = 0; i < module->priv->implementations->len; ++i)
if (impls[i].iface_type == interface)
@@ -317,9 +313,6 @@ peas_object_module_provides_object (PeasObjectModule *module,
g_return_val_if_fail (PEAS_IS_OBJECT_MODULE (module), FALSE);
- if (!module->priv->types_registered)
- peas_object_module_register_types (module);
-
impls = (InterfaceImplementation *) module->priv->implementations->data;
for (i = 0; i < module->priv->implementations->len; ++i)
if (impls[i].iface_type == interface)