From 52f78e040749d24058ee1f575d949b57d15f5987 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 18 Dec 2008 20:42:50 +0000 Subject: [PATCH] Make sure to not close tdb database more than once. (cherry picked from samba commit 6fe6983e4c960abc69d5fa80cbef534ae515209a) Signed-off-by: Stefan Metzmacher --- lib/tdb/pytdb.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/tdb/pytdb.c b/lib/tdb/pytdb.c index d6d06256..b7087c4b 100644 --- a/lib/tdb/pytdb.c +++ b/lib/tdb/pytdb.c @@ -34,10 +34,12 @@ #include #include #include +#include typedef struct { PyObject_HEAD TDB_CONTEXT *ctx; + bool closed; } PyTdbObject; PyAPI_DATA(PyTypeObject) PyTdb; @@ -93,6 +95,7 @@ static PyObject *py_tdb_open(PyTypeObject *type, PyObject *args, PyObject *kwarg ret = PyObject_New(PyTdbObject, &PyTdb); ret->ctx = ctx; + ret->closed = false; return (PyObject *)ret; } @@ -161,7 +164,11 @@ static PyObject *obj_unlockall_read(PyTdbObject *self) static PyObject *obj_close(PyTdbObject *self) { - int ret = tdb_close(self->ctx); + int ret; + if (self->closed) + return Py_None; + ret = tdb_close(self->ctx); + self->closed = true; PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx); return Py_None; } @@ -395,7 +402,8 @@ static PyObject *tdb_object_repr(PyTdbObject *self) static void tdb_object_dealloc(PyTdbObject *self) { - tdb_close(self->ctx); + if (!self->closed) + tdb_close(self->ctx); PyObject_Del(self); } -- 2.34.1