# HG changeset patch # User attila # Date 1402322406 -7200 # Node ID 96f475bfb917e81794cbfcfd40b497b4809e6f16 # Parent d3cc5b704bfed0af753bace583054eaefb4af738 8046025: AccessorProperty.getGetter is not threadsafe Reviewed-by: jlaskey, lagergren diff -r d3cc5b704bfe -r 96f475bfb917 src/jdk/nashorn/internal/runtime/AccessorProperty.java --- a/src/jdk/nashorn/internal/runtime/AccessorProperty.java Fri Jun 06 16:51:53 2014 +0200 +++ b/src/jdk/nashorn/internal/runtime/AccessorProperty.java Mon Jun 09 16:00:06 2014 +0200 @@ -550,8 +550,13 @@ "invalid getter type " + type + " for " + getKey(); //all this does is add a return value filter for object fields only - if (GETTER_CACHE[i] == null) { - GETTER_CACHE[i] = debug( + final MethodHandle[] getterCache = GETTER_CACHE; + final MethodHandle cachedGetter = getterCache[i]; + final MethodHandle getter; + if (cachedGetter != null) { + getter = cachedGetter; + } else { + getter = debug( createGetter( getCurrentType(), type, @@ -561,9 +566,10 @@ getCurrentType(), type, "get"); + getterCache[i] = getter; } - assert GETTER_CACHE[i].type().returnType() == type && GETTER_CACHE[i].type().parameterType(0) == Object.class; - return GETTER_CACHE[i]; + assert getter.type().returnType() == type && getter.type().parameterType(0) == Object.class; + return getter; } @Override