diff options
author | Steve Frécinaux <code@istique.net> | 2010-07-22 15:06:27 +0200 |
---|---|---|
committer | Steve Frécinaux <code@istique.net> | 2010-07-22 15:10:58 +0200 |
commit | feb6e7b7c08ba2aa811a58472c6531cbb0f7aa50 (patch) | |
tree | f2a5324f124d369da7b6ca82664591365aa0bae8 /libpeas/peas-object-module.c | |
parent | 664d5e2ad22ac1acc39bdcf9186dc8ce734c0fcf (diff) | |
download | libpeas-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.c | 31 |
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) |