mirror of https://github.com/python/cpython
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:
parent
94dcf0ddbf
commit
eeed5b7c22
|
@ -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
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue