fix refcounts
authorFelix Domke <tmbinc@elitedvb.net>
Fri, 5 Jan 2007 15:12:38 +0000 (15:12 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Fri, 5 Jan 2007 15:12:38 +0000 (15:12 +0000)
lib/dvb/pmt.cpp

index 1b1455e4f58c01dc78efee438a82156db10659ec..7f560c8e6c7d9b0227fc17d48bb939f5ed617b36 100644 (file)
@@ -865,36 +865,42 @@ static PyObject *createTuple(int pid, const char *type)
        return r;
 }
 
        return r;
 }
 
+static inline PyList_AppendSteal(PyObject *list, PyObject *item)
+{
+       PyList_Append(list, item);
+       Py_DECREF(item);
+}
+
 PyObject *eDVBServicePMTHandler::program::createPythonObject()
 {
        PyObject *r = PyDict_New();
 
        PyObject *l = PyList_New(0);
        
 PyObject *eDVBServicePMTHandler::program::createPythonObject()
 {
        PyObject *r = PyDict_New();
 
        PyObject *l = PyList_New(0);
        
-       PyList_Append(l, createTuple(0, "pat"));
+       PyList_AppendSteal(l, createTuple(0, "pat"));
 
        if (pmtPid != -1)
 
        if (pmtPid != -1)
-               PyList_Append(l, createTuple(pmtPid, "pmt"));
+               PyList_AppendSteal(l, createTuple(pmtPid, "pmt"));
        
        for (std::vector<eDVBServicePMTHandler::videoStream>::const_iterator
                        i(videoStreams.begin()); 
                        i != videoStreams.end(); ++i)
        
        for (std::vector<eDVBServicePMTHandler::videoStream>::const_iterator
                        i(videoStreams.begin()); 
                        i != videoStreams.end(); ++i)
-               PyList_Append(l, createTuple(i->pid, "video"));
+               PyList_AppendSteal(l, createTuple(i->pid, "video"));
 
        for (std::vector<eDVBServicePMTHandler::audioStream>::const_iterator
                        i(audioStreams.begin()); 
                        i != audioStreams.end(); ++i)
 
        for (std::vector<eDVBServicePMTHandler::audioStream>::const_iterator
                        i(audioStreams.begin()); 
                        i != audioStreams.end(); ++i)
-               PyList_Append(l, createTuple(i->pid, "audio"));
+               PyList_AppendSteal(l, createTuple(i->pid, "audio"));
 
        for (std::vector<eDVBServicePMTHandler::subtitleStream>::const_iterator
                        i(subtitleStreams.begin());
                        i != subtitleStreams.end(); ++i)
 
        for (std::vector<eDVBServicePMTHandler::subtitleStream>::const_iterator
                        i(subtitleStreams.begin());
                        i != subtitleStreams.end(); ++i)
-               PyList_Append(l, createTuple(i->pid, "subtitle"));
+               PyList_AppendSteal(l, createTuple(i->pid, "subtitle"));
 
 
-       PyList_Append(l, createTuple(pcrPid, "pcr"));
+       PyList_AppendSteal(l, createTuple(pcrPid, "pcr"));
 
        if (textPid != -1)
 
        if (textPid != -1)
-               PyList_Append(l, createTuple(textPid, "text"));
+               PyList_AppendSteal(l, createTuple(textPid, "text"));
                
        PyDict_SetItemString(r, "pids", l);
        return r;
                
        PyDict_SetItemString(r, "pids", l);
        return r;