File: _mysql.c
Function: _mysql__fetch_row
Error: memory leak: ob_refcnt of new ref from (unknown) _mysql_Exception is 1 too high
1490 int
1491 _mysql__fetch_row(
1492 	_mysql_ResultObject *self,
1493 	PyObject **r,
1494 	int skiprows,
1495 	int maxrows,
1496 	_PYFUNC *convert_row)
1497 {
1498 	unsigned int i;
1499 	MYSQL_ROW row;
1500 
1501 	for (i = skiprows; i<(skiprows+maxrows); i++) {
when taking True path
1502 		PyObject *v;
1503 		if (!self->use)
when considering range: -0x80000000 <= value <= -1
taking False path
1504 			row = mysql_fetch_row(self->result);
1505 		else {
1506 			Py_BEGIN_ALLOW_THREADS;
releasing the GIL by calling PyEval_SaveThread()
1507 			row = mysql_fetch_row(self->result);
1508 			Py_END_ALLOW_THREADS;
reacquiring the GIL by calling PyEval_RestoreThread()
1509 		}
1510 		if (!row && mysql_errno(&(((_mysql_ConnectionObject *)(self->conn))->connection))) {
when treating unknown char * * from _mysql.c:1507 as NULL
taking True path
when treating unknown struct PyObject * from _mysql.c:1510 as non-NULL
when considering range: 1 <= value <= 0xffffffff
taking True path
1511 			_mysql_Exception((_mysql_ConnectionObject *)self->conn);
when _mysql_Exception() succeeds
new ref from (unknown) _mysql_Exception was allocated at: 			_mysql_Exception((_mysql_ConnectionObject *)self->conn);
ob_refcnt is now refs: 1 owned
1512 			goto error;
1513 		}
1514 		if (!row) {
1515 			if (MyTuple_Resize(r, i, 0) == -1) goto error;
1516 			break;
1517 		}
1518 		v = convert_row(self, row);
1519 		if (!v) goto error;
1520 		PyTuple_SET_ITEM(*r, i, v);
1521 	}
1522 	return i-skiprows;
1523   error:
1524 	return -1;
memory leak: ob_refcnt of new ref from (unknown) _mysql_Exception is 1 too high
was expecting final owned ob_refcnt of new ref from (unknown) _mysql_Exception to be 0 since nothing references it but final ob_refcnt is refs: 1 owned
found 2 similar trace(s) to this
1525 }