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