X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=src%2Fgrits-plugin.c;h=91514fcbb3882795747fe4c43d603fddda92a7e4;hb=2eaf81c925c9c1461cd5f1e17abc5443f95e9137;hp=144c713405bf12c456130798eed7cc9e90744ef2;hpb=f383c18c9f85a1b439c6bfb2a27d652278ed019a;p=grits diff --git a/src/grits-plugin.c b/src/grits-plugin.c index 144c713..91514fc 100644 --- a/src/grits-plugin.c +++ b/src/grits-plugin.c @@ -127,8 +127,9 @@ GtkWidget *grits_plugin_get_config(GritsPlugin *plugin) * Plugins API * ***************/ typedef struct { - gchar *name; + gchar *name; GritsPlugin *plugin; + GModule *module; } GritsPluginStore; /** @@ -151,6 +152,14 @@ GritsPlugins *grits_plugins_new(const gchar *dir, GritsPrefs *prefs) return plugins; } +static void grits_plugins_free_store(GritsPluginStore *store) +{ + g_object_unref(store->plugin); + //g_module_close(store->module); + g_free(store->name); + g_free(store); +} + /** * grits_plugins_free: * @plugins: the #GritsPlugins to free @@ -165,9 +174,7 @@ void grits_plugins_free(GritsPlugins *plugins) g_debug("GritsPlugin: freeing %s refs=%d->%d", store->name, G_OBJECT(store->plugin)->ref_count, G_OBJECT(store->plugin)->ref_count-1); - g_object_unref(store->plugin); - g_free(store->name); - g_free(store); + grits_plugins_free_store(store); } g_list_free(plugins->plugins); if (plugins->dir) @@ -270,6 +277,7 @@ GritsPlugin *grits_plugins_load(GritsPlugins *plugins, const char *name, GritsPluginStore *store = g_new0(GritsPluginStore, 1); store->name = g_strdup(name); store->plugin = constructor(viewer, prefs); + store->module = module; plugins->plugins = g_list_prepend(plugins->plugins, store); return store->plugin; } @@ -337,10 +345,8 @@ gboolean grits_plugins_unload(GritsPlugins *plugins, const char *name) for (GList *cur = plugins->plugins; cur; cur = cur->next) { GritsPluginStore *store = cur->data; if (g_str_equal(store->name, name)) { - g_object_unref(store->plugin); - g_free(store->name); - g_free(store); plugins->plugins = g_list_delete_link(plugins->plugins, cur); + grits_plugins_free_store(store); } } return FALSE;