You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2015/09/21 18:05:39 UTC

[2/7] incubator-brooklyn git commit: Fix synchronization in DeserializingClassRenamesProvider

Fix synchronization in DeserializingClassRenamesProvider

Fix bad use of double-checked locking.


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

Branch: refs/heads/master
Commit: b10d23b0868625064a683048fe490e0fedbdf774
Parents: 10c6576
Author: Aled Sage <al...@gmail.com>
Authored: Fri Sep 18 19:26:41 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Sep 21 14:33:19 2015 +0100

----------------------------------------------------------------------
 .../persist/DeserializingClassRenamesProvider.java | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b10d23b0/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/DeserializingClassRenamesProvider.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/DeserializingClassRenamesProvider.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/DeserializingClassRenamesProvider.java
index 9fbac01..9c8c056 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/DeserializingClassRenamesProvider.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/DeserializingClassRenamesProvider.java
@@ -38,19 +38,22 @@ public class DeserializingClassRenamesProvider {
 
     public static final String DESERIALIZING_CLASS_RENAMES_PROPERTIES_PATH = "classpath://org/apache/brooklyn/core/mgmt/persist/deserializingClassRenames.properties";
     
-    private static Map<String, String> cache = null;
+    private static volatile Map<String, String> cache;
     
     @Beta
     public static Map<String, String> loadDeserializingClassRenames() {
-        if (cache!=null) return cache;
-        synchronized (DeserializingClassRenamesProvider.class) {
-            cache = loadDeserializingClassRenamesCache();
-            return cache;
+        // Double-checked locking - got to use volatile or some such!
+        if (cache == null) {
+            synchronized (DeserializingClassRenamesProvider.class) {
+                if (cache == null) {
+                    cache = loadDeserializingClassRenamesCache();
+                }
+            }
         }
+        return cache;
     }
     
-    private synchronized static Map<String, String> loadDeserializingClassRenamesCache() {
-        if (cache!=null) return cache;
+    private static Map<String, String> loadDeserializingClassRenamesCache() {
         InputStream resource = new ResourceUtils(DeserializingClassRenamesProvider.class).getResourceFromUrl(DESERIALIZING_CLASS_RENAMES_PROPERTIES_PATH);
         if (resource != null) {
             try {