summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGregory P. Smith <greg@mad-scientist.com>2007-11-05 02:56:31 (GMT)
committerGregory P. Smith <greg@mad-scientist.com>2007-11-05 02:56:31 (GMT)
commitac11e021438def54dbcb2c41f22608caa454889c (patch)
tree4813c43822444b414e79617c8132008d8ee838c7
parentec10a4a402e5b6845b247f688fc157be45414cdd (diff)
downloadcpython-ac11e021438def54dbcb2c41f22608caa454889c.zip
cpython-ac11e021438def54dbcb2c41f22608caa454889c.tar.gz
cpython-ac11e021438def54dbcb2c41f22608caa454889c.tar.bz2
Add the bsddb.db.DBEnv.lock_id_free method.
Improve test_lock's tempdir creation and cleanup.
-rw-r--r--Lib/bsddb/test/test_lock.py26
-rw-r--r--Misc/NEWS2
-rw-r--r--Modules/_bsddb.c21
3 files changed, 35 insertions, 14 deletions
diff --git a/Lib/bsddb/test/test_lock.py b/Lib/bsddb/test/test_lock.py
index ac29f83..e0d831f 100644
--- a/Lib/bsddb/test/test_lock.py
+++ b/Lib/bsddb/test/test_lock.py
@@ -2,10 +2,12 @@
TestCases for testing the locking sub-system.
"""
-import sys, os, string
+import os
+from pprint import pprint
+import shutil
+import sys
import tempfile
import time
-from pprint import pprint
try:
from threading import Thread, currentThread
@@ -30,21 +32,15 @@ except ImportError:
class LockingTestCase(unittest.TestCase):
def setUp(self):
- homeDir = os.path.join(tempfile.gettempdir(), 'db_home')
- self.homeDir = homeDir
- try: os.mkdir(homeDir)
- except os.error: pass
+ self.homeDir = tempfile.mkdtemp('.test_lock')
self.env = db.DBEnv()
- self.env.open(homeDir, db.DB_THREAD | db.DB_INIT_MPOOL |
- db.DB_INIT_LOCK | db.DB_CREATE)
+ self.env.open(self.homeDir, db.DB_THREAD | db.DB_INIT_MPOOL |
+ db.DB_INIT_LOCK | db.DB_CREATE)
def tearDown(self):
self.env.close()
- import glob
- files = glob.glob(os.path.join(self.homeDir, '*'))
- for file in files:
- os.remove(file)
+ shutil.rmtree(self.homeDir)
def test01_simple(self):
@@ -62,8 +58,8 @@ class LockingTestCase(unittest.TestCase):
self.env.lock_put(lock)
if verbose:
print "Released lock: %s" % lock
-
-
+ if db.version() >= (4,0):
+ self.env.lock_id_free(anID)
def test02_threaded(self):
@@ -124,6 +120,8 @@ class LockingTestCase(unittest.TestCase):
self.env.lock_put(lock)
if verbose:
print "%s: Released %s lock: %s" % (name, lt, lock)
+ if db.version() >= (4,0):
+ self.env.lock_id_free(anID)
#----------------------------------------------------------------------
diff --git a/Misc/NEWS b/Misc/NEWS
index 31898d7..c2a93d3 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -830,6 +830,8 @@ Extension Modules
DB users should use DB.put(k, v) when they want to store duplicates; not
DB[k] = v.
+- Add the bsddb.db.DBEnv.lock_id_free method.
+
- Bug #1686475: Support stat'ing open files on Windows again.
- Patch #1185447: binascii.b2a_qp() now correctly quotes binary characters
diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c
index 95ccb43..d2b62a9 100644
--- a/Modules/_bsddb.c
+++ b/Modules/_bsddb.c
@@ -4250,6 +4250,24 @@ DBEnv_lock_id(DBEnvObject* self, PyObject* args)
return PyInt_FromLong((long)theID);
}
+#if (DBVER >= 40)
+static PyObject*
+DBEnv_lock_id_free(DBEnvObject* self, PyObject* args)
+{
+ int err;
+ u_int32_t theID;
+
+ if (!PyArg_ParseTuple(args, "I:lock_id_free", &theID))
+ return NULL;
+
+ CHECK_ENV_NOT_CLOSED(self);
+ MYDB_BEGIN_ALLOW_THREADS;
+ err = self->db_env->lock_id_free(self->db_env, theID);
+ MYDB_END_ALLOW_THREADS;
+ RETURN_IF_ERR();
+ RETURN_NONE();
+}
+#endif
static PyObject*
DBEnv_lock_put(DBEnvObject* self, PyObject* args)
@@ -5125,6 +5143,9 @@ static PyMethodDef DBEnv_methods[] = {
{"lock_detect", (PyCFunction)DBEnv_lock_detect, METH_VARARGS},
{"lock_get", (PyCFunction)DBEnv_lock_get, METH_VARARGS},
{"lock_id", (PyCFunction)DBEnv_lock_id, METH_VARARGS},
+#if (DBVER >= 40)
+ {"lock_id_free", (PyCFunction)DBEnv_lock_id_free, METH_VARARGS},
+#endif
{"lock_put", (PyCFunction)DBEnv_lock_put, METH_VARARGS},
{"lock_stat", (PyCFunction)DBEnv_lock_stat, METH_VARARGS},
{"log_archive", (PyCFunction)DBEnv_log_archive, METH_VARARGS},