From aa00862425e13408c6f38071cc18677c6a27a5b7 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 12 Mar 2014 13:55:24 +0400 Subject: [PATCH] Double-checked locking fixed in LockBasedStorageManager There were two problems here: * a volatile field was read and then a local variable used, i.e. the field might have been changed in between the check and the return; * this volatile read was unnecessary, because the whole purpose of `_value` local variable is to avoid it. --- .../src/org/jetbrains/jet/storage/LockBasedStorageManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/util.runtime/src/org/jetbrains/jet/storage/LockBasedStorageManager.java b/core/util.runtime/src/org/jetbrains/jet/storage/LockBasedStorageManager.java index 929afec26c5..b132d9e510b 100644 --- a/core/util.runtime/src/org/jetbrains/jet/storage/LockBasedStorageManager.java +++ b/core/util.runtime/src/org/jetbrains/jet/storage/LockBasedStorageManager.java @@ -277,7 +277,7 @@ public class LockBasedStorageManager implements StorageManager { @Override public T invoke() { Object _value = value; - if (!(value instanceof NotValue)) return WrappedValues.unescapeThrowable(_value); + if (!(_value instanceof NotValue)) return WrappedValues.unescapeThrowable(_value); lock.lock(); try {