From ad022d94ef9a32428fe44710e7eff311991fd9e6 Mon Sep 17 00:00:00 2001 From: Bert Vermeulen Date: Mon, 30 Jan 2012 01:22:27 +0100 Subject: [PATCH] srd: clear objects after final decref, so it doesn't happen twice --- decoder.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/decoder.c b/decoder.c index 593f259..7480656 100644 --- a/decoder.c +++ b/decoder.c @@ -173,7 +173,7 @@ int srd_load_decoder(const char *name, struct srd_decoder **dec) "a subclass of sigrokdecode.Decoder.", name); goto err_out; } - Py_DecRef(py_basedec); + Py_CLEAR(py_basedec); /* Check for a proper start() method. */ if (!PyObject_HasAttrString(d->py_dec, "start")) { @@ -187,7 +187,7 @@ int srd_load_decoder(const char *name, struct srd_decoder **dec) "is not a method.", name); goto err_out; } - Py_DecRef(py_method); + Py_CLEAR(py_method); /* Check for a proper decode() method. */ if (!PyObject_HasAttrString(d->py_dec, "decode")) { @@ -201,7 +201,7 @@ int srd_load_decoder(const char *name, struct srd_decoder **dec) "is not a method.", name); goto err_out; } - Py_DecRef(py_method); + Py_CLEAR(py_method); /* If present, options must be a dictionary. */ if (PyObject_HasAttrString(d->py_dec, "options")) { @@ -209,6 +209,7 @@ int srd_load_decoder(const char *name, struct srd_decoder **dec) if (!PyDict_Check(py_attr)) { srd_err("Protocol decoder %s options attribute is not " "a dictionary.", d->name); + Py_DecRef(py_attr); goto err_out; } Py_DecRef(py_attr); -- 2.30.2