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

de-obfuscated some delicate locking code

parent 532fd78a
...@@ -261,15 +261,19 @@ class MappingStorage(object): ...@@ -261,15 +261,19 @@ 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):
with self._lock:
ZODB.utils.check_precondition(self.opened)
# The tid argument exists to support testing. # The tid argument exists to support testing.
if transaction is self._transaction: if transaction is self._transaction:
raise ZODB.POSException.StorageTransactionError( raise ZODB.POSException.StorageTransactionError(
"Duplicate tpc_begin calls for same transaction") "Duplicate tpc_begin calls for same transaction")
self._lock.release()
self._commit_lock.acquire() self._commit_lock.acquire()
self._lock.acquire()
with self._lock:
self._transaction = transaction self._transaction = transaction
self._tdata = {} self._tdata = {}
if tid is None: if tid is None:
......
...@@ -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