Mercurial > hg > openjdk > jdk9 > nashorn
changeset 888:96f475bfb917
8046025: AccessorProperty.getGetter is not threadsafe
Reviewed-by: jlaskey, lagergren
author | attila |
---|---|
date | Mon, 09 Jun 2014 16:00:06 +0200 |
parents | d3cc5b704bfe |
children | 71cfc5012321 |
files | src/jdk/nashorn/internal/runtime/AccessorProperty.java |
diffstat | 1 files changed, 10 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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