You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2015/11/18 18:40:15 UTC

[1/2] incubator-groovy git commit: The usage of the PROP_NAMES HashMap was not thread safe because the access was synchronized only for "put" operations and not for "get" operations: since HashMap is not thread safe all access to get/put operations must

Repository: incubator-groovy
Updated Branches:
  refs/heads/master b1948e89f -> 67b87a359


The usage of the PROP_NAMES HashMap was not thread safe because the access was synchronized only for "put" operations and not for "get" operations: since HashMap is not thread safe all access to get/put operations must be checked. Reimplemented in a thread safe way by leveraging a ConcurrentHashMap: in this way the synchronized block is no more required. (closes #8)


Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/db87d008
Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/db87d008
Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/db87d008

Branch: refs/heads/master
Commit: db87d00892dccee1c18a779cbd54e14d753c9284
Parents: b1948e8
Author: Jacopo Cappellato <ja...@gmail.com>
Authored: Fri May 1 15:13:36 2015 +0200
Committer: pascalschumacher <pa...@gmx.net>
Committed: Wed Nov 18 18:38:40 2015 +0100

----------------------------------------------------------------------
 src/main/groovy/lang/MetaClassImpl.java | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/db87d008/src/main/groovy/lang/MetaClassImpl.java
----------------------------------------------------------------------
diff --git a/src/main/groovy/lang/MetaClassImpl.java b/src/main/groovy/lang/MetaClassImpl.java
index 8e2912f..611cebf 100644
--- a/src/main/groovy/lang/MetaClassImpl.java
+++ b/src/main/groovy/lang/MetaClassImpl.java
@@ -89,6 +89,8 @@ import java.security.AccessController;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 /**
  * Allows methods to be dynamically added to existing classes at runtime
@@ -2418,20 +2420,18 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
         }
     }
 
-    private static final Map<String, String> PROP_NAMES = new HashMap<String, String>(1024);
+    private static final ConcurrentMap<String, String> PROP_NAMES = new ConcurrentHashMap<String, String>(1024);
 
     private String getPropName(String methodName) {
         String name = PROP_NAMES.get(methodName);
-        if (name != null)
-            return name;
-
-        synchronized (PROP_NAMES) {
+        if (name == null) {
             // assume "is" or "[gs]et"
             String stripped = methodName.startsWith("is") ? methodName.substring(2) : methodName.substring(3);
             String propName = java.beans.Introspector.decapitalize(stripped);
-            PROP_NAMES.put(methodName, propName);
-            return propName;
+            PROP_NAMES.putIfAbsent(methodName, propName);
+            name = PROP_NAMES.get(methodName);
         }
+        return name;
     }
 
     private MetaProperty makeReplacementMetaProperty(MetaProperty mp, String propName, boolean isGetter, MetaMethod propertyMethod) {


[2/2] incubator-groovy git commit: Removed useless synchronized block and comment; they were probably a leftover after commit 17ee95e.

Posted by pa...@apache.org.
Removed useless synchronized block and comment; they were probably a leftover after commit 17ee95e.


Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/67b87a35
Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/67b87a35
Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/67b87a35

Branch: refs/heads/master
Commit: 67b87a3592f13a6281f5b20081c37a66c80079b9
Parents: db87d00
Author: Jacopo Cappellato <ja...@gmail.com>
Authored: Fri May 1 14:49:48 2015 +0200
Committer: pascalschumacher <pa...@gmx.net>
Committed: Wed Nov 18 18:39:41 2015 +0100

----------------------------------------------------------------------
 src/main/groovy/lang/MetaClassImpl.java | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/67b87a35/src/main/groovy/lang/MetaClassImpl.java
----------------------------------------------------------------------
diff --git a/src/main/groovy/lang/MetaClassImpl.java b/src/main/groovy/lang/MetaClassImpl.java
index 611cebf..a858161 100644
--- a/src/main/groovy/lang/MetaClassImpl.java
+++ b/src/main/groovy/lang/MetaClassImpl.java
@@ -3116,10 +3116,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
                 return method;
             }
         }
-        //log.warning("Creating reflection based dispatcher for: " + aMethod);
-        synchronized (aMethod.cachedClass) {
-            return aMethod;
-        }
+        return aMethod;
     }