]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix python modules with multiple scripts, by incrementing reference
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Thu, 29 Jun 2023 08:16:37 +0000 (10:16 +0200)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Thu, 29 Jun 2023 08:16:37 +0000 (10:16 +0200)
  counts.

doc/Changelog
pythonmod/pythonmod.c

index 33f156261d0dbecf6e6d3779871d32e01b5a0a9b..7831c81ba9dcb307c4621e46a58821c20e3e64ec 100644 (file)
@@ -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.
index 3aa1c80f6c6dee1f525f529dba5352a4264ac296..b73dc2d53877341f95410c3b4e7c76b9a270abb2 100644 (file)
@@ -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) {