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