diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2018-07-23 18:57:49 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2018-07-23 19:01:46 (GMT) |
commit | abefe01dd260cddbd253ba0c03d9c903138c71c1 (patch) | |
tree | 834f683e79893534324af94c537984542b7dc00a /plugins/pychrysalide/plugin.c | |
parent | 50eb8c462e7ad2b4e5b82d27b1af6e86091ea272 (diff) |
Tracked the reference counter for plugins with more care.
Diffstat (limited to 'plugins/pychrysalide/plugin.c')
-rw-r--r-- | plugins/pychrysalide/plugin.c | 22 |
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; } |