Commit 0ed7579d authored by Jim Fulton's avatar Jim Fulton

de-obfuscated some delicate locking code

parent 532fd78a
...@@ -261,24 +261,28 @@ class MappingStorage(object): ...@@ -261,24 +261,28 @@ class MappingStorage(object):
self._commit_lock.release() self._commit_lock.release()
# ZODB.interfaces.IStorage # ZODB.interfaces.IStorage
@ZODB.utils.locked(opened)
def tpc_begin(self, transaction, tid=None): def tpc_begin(self, transaction, tid=None):
# The tid argument exists to support testing. with self._lock:
if transaction is self._transaction:
raise ZODB.POSException.StorageTransactionError( ZODB.utils.check_precondition(self.opened)
"Duplicate tpc_begin calls for same transaction")
self._lock.release() # The tid argument exists to support testing.
if transaction is self._transaction:
raise ZODB.POSException.StorageTransactionError(
"Duplicate tpc_begin calls for same transaction")
self._commit_lock.acquire() self._commit_lock.acquire()
self._lock.acquire()
self._transaction = transaction with self._lock:
self._tdata = {} self._transaction = transaction
if tid is None: self._tdata = {}
if self._transactions: if tid is None:
old_tid = self._transactions.maxKey() if self._transactions:
else: old_tid = self._transactions.maxKey()
old_tid = None else:
tid = ZODB.utils.newTid(old_tid) old_tid = None
self._tid = tid tid = ZODB.utils.newTid(old_tid)
self._tid = tid
# ZODB.interfaces.IStorage # ZODB.interfaces.IStorage
@ZODB.utils.locked(opened) @ZODB.utils.locked(opened)
......
...@@ -268,6 +268,12 @@ def mktemp(dir=None, prefix='tmp'): ...@@ -268,6 +268,12 @@ def mktemp(dir=None, prefix='tmp'):
os.close(handle) os.close(handle)
return filename return filename
def check_precondition(precondition):
if not precondition():
raise AssertionError(
"Failed precondition: ",
precondition.__doc__.strip())
class Locked(object): class Locked(object):
def __init__(self, func, inst=None, class_=None, preconditions=()): def __init__(self, func, inst=None, class_=None, preconditions=()):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment