summaryrefslogtreecommitdiff
path: root/plugins/pychrysalide/plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/pychrysalide/plugin.c')
-rw-r--r--plugins/pychrysalide/plugin.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/plugins/pychrysalide/plugin.c b/plugins/pychrysalide/plugin.c
index b57794c..a916668 100644
--- a/plugins/pychrysalide/plugin.c
+++ b/plugins/pychrysalide/plugin.c
@@ -25,6 +25,8 @@
#include "plugin.h"
+#include <assert.h>
+#include <malloc.h>
#include <pygobject.h>
#include <string.h>
@@ -166,6 +168,8 @@ static void g_python_plugin_init(GPythonPlugin *plugin)
static void g_python_plugin_dispose(GPythonPlugin *plugin)
{
+ Py_DECREF(plugin->instance);
+
G_OBJECT_CLASS(g_python_plugin_parent_class)->dispose(G_OBJECT(plugin));
}
@@ -185,9 +189,21 @@ static void g_python_plugin_dispose(GPythonPlugin *plugin)
static void g_python_plugin_finalize(GPythonPlugin *plugin)
{
- Py_DECREF(plugin->instance);
+ plugin_interface *final; /* Interface finale conservée */
+
Py_DECREF(plugin->module);
+ final = (plugin_interface *)G_PLUGIN_MODULE(plugin)->interface;
+
+ if (final != NULL)
+ {
+ assert(final->required_count == 1);
+
+ free(final->required);
+ free(final);
+
+ }
+
G_OBJECT_CLASS(g_python_plugin_parent_class)->finalize(G_OBJECT(plugin));
}
@@ -519,6 +535,10 @@ static bool g_python_plugin_read_interface(GPythonPlugin *plugin)
memcpy(final, &interface, sizeof(interface));
+ final->required = (const char **)malloc(sizeof(char *));
+ final->required[0] = "PyChrysalide";
+ final->required_count = 1;
+
G_PLUGIN_MODULE(plugin)->interface = final;
}