]> granicus.if.org Git - python/commitdiff
Add the bsddb.db.DBEnv.lock_id_free method.
authorGregory P. Smith <greg@mad-scientist.com>
Mon, 5 Nov 2007 02:56:31 +0000 (02:56 +0000)
committerGregory P. Smith <greg@mad-scientist.com>
Mon, 5 Nov 2007 02:56:31 +0000 (02:56 +0000)
Improve test_lock's tempdir creation and cleanup.

Lib/bsddb/test/test_lock.py
Misc/NEWS
Modules/_bsddb.c

index ac29f83d06151a4d1a459162012b24c656e2a7dd..e0d831f76287c4ee09317a4e0f73db9f07e05a5e 100644 (file)
@@ -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)
 
 
 #----------------------------------------------------------------------
index 31898d7fb3b765902f83653ff9cd1ab41892d034..c2a93d342ece1c09fb5e4345e7cd3fa6b216a9ab 100644 (file)
--- 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
index 95ccb438dd6ecc462b8eab10623ee8db4bdca1a7..d2b62a9d40ddd8d625f7c8b221638672a852c195 100644 (file)
@@ -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},