File: unix/cdrommodule.c
Function: cdrom_open
Error: ob_refcnt of '*cdrom_file_object' is 1 too high
273 static PyObject* cdrom_open(PyObject *self, PyObject *args)
274 {
275     int cdrom_fd;
276     FILE *cdrom_file;
277     char *cdrom_device = CDDB_DEFAULT_CDROM_DEVICE;
278     int cdrom_open_flags = CDDB_DEFAULT_CDROM_FLAGS;
279 
280     PyObject *cdrom_file_object;
281 
282     if (!PyArg_ParseTuple(args, "|si", &cdrom_device, &cdrom_open_flags))
283 	return NULL;
when PyArg_ParseTuple() succeeds
taking False path
284 
285     cdrom_fd = open(cdrom_device, cdrom_open_flags);
286 
287     if (cdrom_fd == -1) {
288 	PyErr_SetFromErrno(cdrom_error);
when considering range: -0x80000000 <= value <= -2
taking False path
289 	return NULL;
290     }
291 
292     cdrom_file = fdopen(cdrom_fd, "r");
293 
294     if (cdrom_file == NULL) {
295 	PyErr_SetFromErrno(cdrom_error);
when treating unknown struct FILE * from unix/cdrommodule.c:293 as non-NULL
taking False path
296 	return NULL;
297     }
298 
299     cdrom_file_object = PyFile_FromFile(cdrom_file, cdrom_device, "r", cdrom_close);
300 
when PyFile_FromFile() succeeds
new ref from (unknown) PyFile_FromFile allocated at:     cdrom_file_object = PyFile_FromFile(cdrom_file, cdrom_device, "r", cdrom_close);
ob_refcnt is now refs: 1 + N where N >= 0
301     if (cdrom_file_object == NULL) {
302 	PyErr_SetString(cdrom_error, "Internal conversion from file pointer to Python object failed");
taking False path
303 	fclose(cdrom_file);
304 	return NULL;
305     }
306 
307     return Py_BuildValue("O", cdrom_file_object);
308 }
when Py_BuildValue() succeeds
ob_refcnt is now refs: 1 + N where N >= 1
309 
ob_refcnt of '*cdrom_file_object' is 1 too high was expecting final ob_refcnt to be N + 0 (for some unknown N) but final ob_refcnt is N + 1 found 3 similar trace(s) to this