Merge this fix from the pybsddb tree:

r293 | jcea | 2008-01-31 01:08:19 -0800 (Thu, 31 Jan 2008) | 4 lines

Solved memory leak when using cursors with
databases without environment.
This commit is contained in:
Gregory P. Smith 2008-02-03 07:20:53 +00:00
parent 94dcf0ddbf
commit eeed5b7c22
2 changed files with 9 additions and 2 deletions

View File

@ -1270,6 +1270,9 @@ Extension Modules
- Bug #1372: zlibmodule.c: int overflow in PyZlib_decompress - Bug #1372: zlibmodule.c: int overflow in PyZlib_decompress
- bsddb module: Fix memory leak when using database cursors on
databases without a DBEnv.
Tests Tests
----- -----

View File

@ -824,7 +824,6 @@ DBCursor_dealloc(DBCursorObject* self)
} }
if (self->dbc != NULL) { if (self->dbc != NULL) {
MYDB_BEGIN_ALLOW_THREADS;
/* If the underlying database has been closed, we don't /* If the underlying database has been closed, we don't
need to do anything. If the environment has been closed need to do anything. If the environment has been closed
we need to leak, as BerkeleyDB will crash trying to access we need to leak, as BerkeleyDB will crash trying to access
@ -833,9 +832,14 @@ DBCursor_dealloc(DBCursorObject* self)
a database open. */ a database open. */
if (self->mydb->db && self->mydb->myenvobj && if (self->mydb->db && self->mydb->myenvobj &&
!self->mydb->myenvobj->closed) !self->mydb->myenvobj->closed)
/* test for: open db + no environment or non-closed environment */
if (self->mydb->db && (!self->mydb->myenvobj || (self->mydb->myenvobj &&
!self->mydb->myenvobj->closed))) {
MYDB_BEGIN_ALLOW_THREADS;
err = self->dbc->c_close(self->dbc); err = self->dbc->c_close(self->dbc);
MYDB_END_ALLOW_THREADS;
}
self->dbc = NULL; self->dbc = NULL;
MYDB_END_ALLOW_THREADS;
} }
Py_XDECREF( self->mydb ); Py_XDECREF( self->mydb );
PyObject_Del(self); PyObject_Del(self);