diff options
Diffstat (limited to 'src/python-systemd/_reader.c')
-rw-r--r-- | src/python-systemd/_reader.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/python-systemd/_reader.c b/src/python-systemd/_reader.c index 06bdf1694e..ae3d77cfe9 100644 --- a/src/python-systemd/_reader.c +++ b/src/python-systemd/_reader.c @@ -383,7 +383,7 @@ Journal_seek(Journal *self, PyObject *args, PyObject *keywds) &offset, &whence)) return NULL; - PyObject *arg; + PyObject *result=NULL; if (whence == SEEK_SET){ int r; Py_BEGIN_ALLOW_THREADS @@ -394,10 +394,10 @@ Journal_seek(Journal *self, PyObject *args, PyObject *keywds) return NULL; } if (offset > 0LL) { - Py_DECREF(PyObject_CallMethod((PyObject *)self, "get_next", "L", offset)); + result = PyObject_CallMethod((PyObject *)self, "get_next", "L", offset); } }else if (whence == SEEK_CUR){ - Py_DECREF(PyObject_CallMethod((PyObject *)self, "get_next", "L", offset)); + result = PyObject_CallMethod((PyObject *)self, "get_next", "L", offset); }else if (whence == SEEK_END){ int r; Py_BEGIN_ALLOW_THREADS @@ -407,14 +407,19 @@ Journal_seek(Journal *self, PyObject *args, PyObject *keywds) PyErr_SetString(PyExc_RuntimeError, "Error seeking to tail"); return NULL; } - Py_DECREF(PyObject_CallMethod((PyObject *)self, "get_next", "L", -1LL)); if (offset < 0LL) { - Py_DECREF(PyObject_CallMethod((PyObject *)self, "get_next", "L", offset)); + result = PyObject_CallMethod((PyObject *)self, "get_next", "L", offset); + }else{ + result = PyObject_CallMethod((PyObject *)self, "get_next", "L", -1LL); } }else{ PyErr_SetString(PyExc_ValueError, "Invalid value for whence"); - return NULL; } + + if (result) + Py_DECREF(result); + if (PyErr_Occurred()) + return NULL; Py_RETURN_NONE; } @@ -607,7 +612,7 @@ Journal_iter(PyObject *self) static PyObject * Journal_iternext(PyObject *self) { - PyObject *dict, *arg; + PyObject *dict; Py_ssize_t dict_size; dict = PyObject_CallMethod(self, "get_next", ""); |