Branch: refs/tags/1.25 Author: Matthew Brush mbrush@codebrainz.ca Committer: Matthew Brush mbrush@codebrainz.ca Date: Sun, 12 Jul 2015 05:01:37 UTC Commit: 625e29e8cc5fca8085029b82055b32ef1c6dd53d https://github.com/geany/geany-plugins/commit/625e29e8cc5fca8085029b82055b32...
Log Message: ----------- GeanyPy: Unload Python plugins when GeanyPy is deactivated
This prevents crashes and/or lockups when the GeanyPy C plugin is reloaded.
FIXME: Because it calls the normal unloading path, it updates the list of loaded plugins to remove each plugin. The net effect is that when the C GeanyPy plugin is unloaded, it forgets all of the Python plugins that were loaded at the time.
Modified Paths: -------------- geanypy/geany/manager.py geanypy/src/geanypy-plugin.c
Modified: geanypy/geany/manager.py 3 lines changed, 3 insertions(+), 0 deletions(-) =================================================================== @@ -93,6 +93,9 @@ def activate_plugin(self, filename): def deactivate_plugin(self, filename): self.loader.unload_plugin(filename)
+ def deactivate_all_plugins(self): + self.response(gtk.RESPONSE_CLOSE) + self.loader.unload_all_plugins()
def load_plugins_list(self): liststore = gtk.ListStore(gobject.TYPE_BOOLEAN, str, str)
Modified: geanypy/src/geanypy-plugin.c 11 lines changed, 11 insertions(+), 0 deletions(-) =================================================================== @@ -278,6 +278,17 @@ plugin_init(GeanyData *data)
G_MODULE_EXPORT void plugin_cleanup(void) { + PyObject* deactivate_all_plugins = PyObject_GetAttrString(manager, + "deactivate_all_plugins"); + if (deactivate_all_plugins != NULL) + { + PyObject* r = PyObject_CallObject(deactivate_all_plugins, NULL); + if (r) + Py_DECREF(r); + Py_DECREF(deactivate_all_plugins); + + } + signal_manager_free(signal_manager); Py_XDECREF(manager); GeanyPy_stop_interpreter();
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
plugins-commits@lists.geany.org