Signed-off-by: Stefan Metzmacher <metze@samba.org>
#include <signal.h>
#include <tdb.h>
#include <fcntl.h>
+#include <stdbool.h>
typedef struct {
PyObject_HEAD
TDB_CONTEXT *ctx;
+ bool closed;
} PyTdbObject;
PyAPI_DATA(PyTypeObject) PyTdb;
ret = PyObject_New(PyTdbObject, &PyTdb);
ret->ctx = ctx;
+ ret->closed = false;
return (PyObject *)ret;
}
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;
}
static void tdb_object_dealloc(PyTdbObject *self)
{
- tdb_close(self->ctx);
+ if (!self->closed)
+ tdb_close(self->ctx);
PyObject_Del(self);
}