[Mulgara-svn] r1107 - trunk/src/jar/resolver/java/org/mulgara/resolver
ronald at mulgara.org
ronald at mulgara.org
Thu Jul 24 07:14:30 UTC 2008
Author: ronald
Date: 2008-07-24 00:14:28 -0700 (Thu, 24 Jul 2008)
New Revision: 1107
Modified:
trunk/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java
Log:
Revert r1104 and instead call purge() on the timer-task to force the release
of the cancelled task and the associated transaction object.
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java 2008-07-23 21:41:07 UTC (rev 1106)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java 2008-07-24 07:14:28 UTC (rev 1107)
@@ -103,6 +103,7 @@
XAReaper reaper = timeoutTasks.remove(transaction);
if (reaper != null) {
reaper.cancel();
+ reaperTimer.purge();
}
}
}
@@ -197,6 +198,7 @@
for (XAReaper reaper : timeoutTasks.values()) {
reaper.cancel();
}
+ reaperTimer.purge();
timeoutTasks.clear();
}
}
@@ -352,19 +354,18 @@
}
private class XAReaper extends TimerTask {
- private static final long WAKEUP_CYCLE = 20000; // 20 seconds
+ private final MulgaraTransaction transaction;
private final long txnDeadline;
private final long idleTimeout;
- private MulgaraTransaction transaction;
public XAReaper(MulgaraTransaction transaction, long txnDeadline, long idleTimeout, long lastActive) {
this.transaction = transaction;
this.txnDeadline = txnDeadline;
this.idleTimeout = idleTimeout;
- long now = System.currentTimeMillis();
- if (lastActive <= 0) lastActive = now;
- long nextWakeup = Math.min(Math.min(txnDeadline, lastActive + idleTimeout), now + WAKEUP_CYCLE);
+ if (lastActive <= 0)
+ lastActive = System.currentTimeMillis();
+ long nextWakeup = Math.min(txnDeadline, lastActive + idleTimeout);
if (logger.isDebugEnabled()) {
logger.debug("Transaction-reaper created, txn=" + transaction + ", txnDeadline=" + txnDeadline +
@@ -382,10 +383,12 @@
long now = System.currentTimeMillis();
synchronized (getMutexLock()) {
- if (timeoutTasks.remove(transaction) == null) return; // looks like we got cleaned up
+ if (timeoutTasks.remove(transaction) == null)
+ return; // looks like we got cleaned up
if (now < txnDeadline && ((lastActive <= 0) || (now < lastActive + idleTimeout))) {
- if (logger.isDebugEnabled()) logger.debug("Transaction still active: " + lastActive + " time: " + now + " idle-timeout: " + idleTimeout + " - rescheduling timer");
+ if (logger.isDebugEnabled())
+ logger.debug("Transaction still active: " + lastActive + " time: " + now + " idle-timeout: " + idleTimeout + " - rescheduling timer");
timeoutTasks.put(transaction, new XAReaper(transaction, txnDeadline, idleTimeout, lastActive));
return;
@@ -406,12 +409,5 @@
}
}.start();
}
-
- public boolean cancel() {
- synchronized (getMutexLock()) {
- transaction = null;
- }
- return super.cancel();
- }
}
}
More information about the Mulgara-svn
mailing list