[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