From: W.C.A. Wijngaards Date: Thu, 29 Jun 2023 08:16:37 +0000 (+0200) Subject: - Fix python modules with multiple scripts, by incrementing reference X-Git-Tag: release-1.18.0rc1~24^2~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7696074fa9c69611baa4aacabccea7e19e62980b;p=thirdparty%2Funbound.git - Fix python modules with multiple scripts, by incrementing reference counts. --- diff --git a/doc/Changelog b/doc/Changelog index 33f156261..7831c81ba 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +29 June 2023: Wouter + - Fix python modules with multiple scripts, by incrementing reference + counts. + 27 June 2023: George - Merge #892: Add cachedb hit stat. Introduces 'num.query.cachedb' as a new statistical counter. diff --git a/pythonmod/pythonmod.c b/pythonmod/pythonmod.c index 3aa1c80f6..b73dc2d53 100644 --- a/pythonmod/pythonmod.c +++ b/pythonmod/pythonmod.c @@ -440,24 +440,28 @@ int pythonmod_init(struct module_env* env, int id) return 0; } } + Py_XINCREF(pe->func_init); if ((pe->func_deinit = PyDict_GetItemString(pe->dict, "deinit")) == NULL) { log_err("pythonmod: function deinit is missing in %s", pe->fname); PyGILState_Release(gil); return 0; } + Py_XINCREF(pe->func_deinit); if ((pe->func_operate = PyDict_GetItemString(pe->dict, "operate")) == NULL) { log_err("pythonmod: function operate is missing in %s", pe->fname); PyGILState_Release(gil); return 0; } + Py_XINCREF(pe->func_operate); if ((pe->func_inform = PyDict_GetItemString(pe->dict, "inform_super")) == NULL) { log_err("pythonmod: function inform_super is missing in %s", pe->fname); PyGILState_Release(gil); return 0; } + Py_XINCREF(pe->func_inform); if (init_standard) { @@ -513,6 +517,10 @@ void pythonmod_deinit(struct module_env* env, int id) Py_XDECREF(res); /* Free shared data if any */ Py_XDECREF(pe->data); + Py_XDECREF(pe->func_init); + Py_XDECREF(pe->func_deinit); + Py_XDECREF(pe->func_inform); + Py_XDECREF(pe->func_operate); PyGILState_Release(gil); if(--py_mod_count==0) {