You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by pe...@apache.org on 2013/11/18 22:54:22 UTC

svn commit: r1543183 - /river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/TxnManagerImpl.java

Author: peter_firmstone
Date: Mon Nov 18 21:54:21 2013
New Revision: 1543183

URL: http://svn.apache.org/r1543183
Log:
Fix Mahalo's use of ConcurrentMap to utilise concurrent methods, originally Mahalo used HashMap, this was refactored to ConcurrentMap to ensure visibility between threads.

Modified:
    river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/TxnManagerImpl.java

Modified: river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/TxnManagerImpl.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/TxnManagerImpl.java?rev=1543183&r1=1543182&r2=1543183&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/TxnManagerImpl.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/TxnManagerImpl.java Mon Nov 18 21:54:21 2013
@@ -558,7 +558,7 @@ class TxnManagerImpl /*extends RemoteSer
             try {
                 str = serverTransaction(tr);
                 TxnManagerTransaction existed = txns.putIfAbsent(Long.valueOf(str.id), txntr);
-                /* This should never happen, but in the unprobable event we get a collision */
+                /* This should never happen, but in the improbable event we get a collision */
                 if (existed == null){ 
                     todoPut = false;
                     expMgr.register(txntr);
@@ -721,7 +721,7 @@ class TxnManagerImpl /*extends RemoteSer
 
 	// txntr.commit does expiration check
 	txntr.commit(waitFor);
-        txns.remove(Long.valueOf(id));
+        txns.remove(Long.valueOf(id), txntr); // Only removed if commit doesn't throw exception.
 
 	if (transactionsLogger.isLoggable(Level.FINEST)) {
             transactionsLogger.log(Level.FINEST,
@@ -809,7 +809,7 @@ class TxnManagerImpl /*extends RemoteSer
             if (t instanceof Error) throw (Error) t;
             if (t instanceof RuntimeException) throw (RuntimeException) t;
         }
-	txns.remove(Long.valueOf(id));
+	txns.remove(Long.valueOf(id), txntr);
 
 	if (transactionsLogger.isLoggable(Level.FINEST)) {
             transactionsLogger.log(Level.FINEST,
@@ -1202,10 +1202,11 @@ class TxnManagerImpl /*extends RemoteSer
 	     * their expirations are irrelevant. Therefore, any recovered
 	     * transactions are effectively lease.FOREVER. 
 	     */
+            
+            TxnManagerTransaction existed = txns.putIfAbsent(key, tmt);
+            if (existed != null) tmt = existed;
 	}
 
-	txns.put(key, tmt);
-
         if (operationsLogger.isLoggable(Level.FINER)) {
             operationsLogger.exiting(TxnManagerImpl.class.getName(), 
 	        "enterTMT", tmt);