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 {