bindings: python: fix a memory leak in gpiod_Line_event_wait()
authorBartosz Golaszewski <bartekgola@gmail.com>
Mon, 14 May 2018 09:18:18 +0000 (11:18 +0200)
committerBartosz Golaszewski <bartekgola@gmail.com>
Mon, 14 May 2018 10:01:13 +0000 (12:01 +0200)
We don't return the object returned from gpiod_LineBulk_event_wait()
back to the interpreter. We need to collect it before returning True.

Signed-off-by: Bartosz Golaszewski <bartekgola@gmail.com>
bindings/python/gpiodmodule.c

index 0aecb2471c9c82920d5beb7aeeb919318e8f4da1..02af81958df49e776bbe22a52c73c4f19e5bfe93 100644 (file)
@@ -422,17 +422,20 @@ static PyObject *gpiod_Line_event_wait(gpiod_LineObject *self,
                                       PyObject *args, PyObject *kwds)
 {
        gpiod_LineBulkObject *bulk_obj;
-       PyObject *ret;
+       PyObject *events;
 
        bulk_obj = gpiod_LineToLineBulk(self);
        if (!bulk_obj)
                return NULL;
 
-       ret = gpiod_LineBulk_event_wait(bulk_obj, args, kwds);
+       events = gpiod_LineBulk_event_wait(bulk_obj, args, kwds);
        Py_DECREF(bulk_obj);
-       if (!ret || ret == Py_False)
-               return ret;
+       if (!events)
+               return NULL;
+       if (events == Py_False)
+               return Py_False;
 
+       Py_DECREF(events);
        Py_RETURN_TRUE;
 }