As per https://docs.python.org/3/c-api/none.html, None has to be treated
exactly like other objects for reference counting.
So, when we use it, we need to INCREF and when we are done, DECREF
---
 contrib/spoa_server/ps_python.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/contrib/spoa_server/ps_python.c b/contrib/spoa_server/ps_python.c
index 20861d6..04b21f1 100644
--- a/contrib/spoa_server/ps_python.c
+++ b/contrib/spoa_server/ps_python.c
@@ -634,6 +634,7 @@ static int ps_python_exec_message(struct worker *w, void 
*ref, int nargs, struct
 
                switch (args[i].value.type) {
                case SPOE_DATA_T_NULL:
+                       Py_INCREF(Py_None);
                        value = Py_None;
                        break;
                case SPOE_DATA_T_BOOL:
@@ -722,6 +723,7 @@ static int ps_python_exec_message(struct worker *w, void 
*ref, int nargs, struct
                        value = 
PY_BYTES_FROM_STRING_AND_SIZE(args[i].value.u.buffer.str, 
args[i].value.u.buffer.len);
                        break;
                default:
+                       Py_INCREF(Py_None);
                        value = Py_None;
                        break;
                }
@@ -786,9 +788,7 @@ static int ps_python_exec_message(struct worker *w, void 
*ref, int nargs, struct
                PyErr_Print();
                return 0;
        }
-       if (result != Py_None) {
-               Py_DECREF(result);
-       }
+       Py_DECREF(result);
 
        return 1;
 }
-- 
2.23.3


Reply via email to