diff options
author | Gregory P. Smith <greg@mad-scientist.com> | 2007-11-05 02:56:31 (GMT) |
---|---|---|
committer | Gregory P. Smith <greg@mad-scientist.com> | 2007-11-05 02:56:31 (GMT) |
commit | ac11e021438def54dbcb2c41f22608caa454889c (patch) | |
tree | 4813c43822444b414e79617c8132008d8ee838c7 | |
parent | ec10a4a402e5b6845b247f688fc157be45414cdd (diff) | |
download | cpython-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.py | 26 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Modules/_bsddb.c | 21 |
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) #---------------------------------------------------------------------- @@ -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}, |