Commit b709cc89 authored by Julien Muchembled's avatar Julien Muchembled

client: really fix ZODB monkey-patch when DB lock is not acquired

Commit 5c5c7d9a was a wrong fix because RLock
does not raise 'thread.error' like Lock (when releasing an unacquired lock).

Python >= 2.5 raises a RuntimeError and older Python raise an AssertionError.
parent 4df975e8
...@@ -57,10 +57,10 @@ if 1: ...@@ -57,10 +57,10 @@ if 1:
### ###
try: try:
if Connection._nexedi_fix != 4: if Connection._nexedi_fix != 5:
raise Exception("A different ZODB fix is already applied") raise Exception("A different ZODB fix is already applied")
except AttributeError: except AttributeError:
Connection._nexedi_fix = 4 Connection._nexedi_fix = 5
# Whenever an connection is opened (and there's usually an existing one # Whenever an connection is opened (and there's usually an existing one
# in DB pool that can be reused) whereas the transaction is already # in DB pool that can be reused) whereas the transaction is already
...@@ -69,14 +69,12 @@ if 1: ...@@ -69,14 +69,12 @@ if 1:
# For example, there's no open transaction when a ZPublisher/Publish # For example, there's no open transaction when a ZPublisher/Publish
# transaction begins. # transaction begins.
import thread
def open(self, *args, **kw): def open(self, *args, **kw):
def _flush_invalidations(): def _flush_invalidations():
acquire = self._db._a acquire = self._db._a
try: try:
self._db._r() self._db._r() # this is a RLock
except thread.error: except (AssertionError, RuntimeError): # old Python uses assert
acquire = lambda: None acquire = lambda: None
try: try:
del self._flush_invalidations del self._flush_invalidations
......
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