From: Bert Vermeulen Date: Mon, 30 Jan 2012 00:22:27 +0000 (+0100) Subject: srd: clear objects after final decref, so it doesn't happen twice X-Git-Tag: libsigrokdecode-0.1.0~82 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=ad022d94ef9a32428fe44710e7eff311991fd9e6;p=libsigrokdecode.git srd: clear objects after final decref, so it doesn't happen twice --- 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);