Author: mircea.markus
Date: 2008-03-25 13:52:13 -0400 (Tue, 25 Mar 2008)
New Revision: 5459
Modified:
core/branches/1.4.X/src/org/jboss/cache/interceptors/PessimisticLockInterceptor.java
Log:
JBCACHE-1292
Modified:
core/branches/1.4.X/src/org/jboss/cache/interceptors/PessimisticLockInterceptor.java
===================================================================
---
core/branches/1.4.X/src/org/jboss/cache/interceptors/PessimisticLockInterceptor.java 2008-03-24
23:02:14 UTC (rev 5458)
+++
core/branches/1.4.X/src/org/jboss/cache/interceptors/PessimisticLockInterceptor.java 2008-03-25
17:52:13 UTC (rev 5459)
@@ -174,11 +174,20 @@
// release the locks for the given TX
if (fqn != null)
{
+ long timeout = zeroLockTimeout ? 0 : lock_acquisition_timeout;
+ // make sure we can bail out of this loop
+ long cutoffTime = System.currentTimeMillis() + timeout;
+ boolean firstTry = true;
if (createIfNotExists)
{
do
{
+ if (!firstTry && System.currentTimeMillis() > cutoffTime)
+ {
+ throw new TimeoutException("Unable to acquire lock on Fqn " +
fqn + " after " + timeout + " millis");
+ }
lock(fqn, ctx.getGlobalTransaction(), lock_type, recursive,
zeroLockTimeout ? 0 : lock_timeout, createIfNotExists, storeLockedNode, isRemoveData);
+ firstTry = false;
}
while(!cache.exists(fqn)); // keep trying until we have the lock (fixes
concurrent remove())
// terminates successfully, or with (Timeout)Exception