diff options
author | Lukas Rytz <lukas.rytz@typesafe.com> | 2016-08-09 16:49:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-09 16:49:04 +0200 |
commit | 88344b71a1c823600f5b255b2752d85dfbe1096b (patch) | |
tree | 6b2d83f6f2ddd8b50f581222757709dc68370eb1 | |
parent | a02b913367add3629295c0d3451ebfac586e6181 (diff) | |
parent | c1bd857318b01b223b3f5dbd99aa2e71b1b232d4 (diff) | |
download | scala-88344b71a1c823600f5b255b2752d85dfbe1096b.tar.gz scala-88344b71a1c823600f5b255b2752d85dfbe1096b.tar.bz2 scala-88344b71a1c823600f5b255b2752d85dfbe1096b.zip |
Merge pull request #5315 from retronym/topic/race
Fix race condition in lambda deserialization
-rw-r--r-- | src/library/scala/runtime/LambdaDeserializer.scala | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/library/scala/runtime/LambdaDeserializer.scala b/src/library/scala/runtime/LambdaDeserializer.scala index ad7d12ba5d..a6e08e6e61 100644 --- a/src/library/scala/runtime/LambdaDeserializer.scala +++ b/src/library/scala/runtime/LambdaDeserializer.scala @@ -94,13 +94,15 @@ object LambdaDeserializer { val key = serialized.getImplMethodName + " : " + serialized.getImplMethodSignature val factory: MethodHandle = if (cache == null) { makeCallSite.getTarget - } else cache.get(key) match { - case null => - val callSite = makeCallSite - val temp = callSite.getTarget - cache.put(key, temp) - temp - case target => target + } else cache.synchronized{ + cache.get(key) match { + case null => + val callSite = makeCallSite + val temp = callSite.getTarget + cache.put(key, temp) + temp + case target => target + } } val captures = Array.tabulate(serialized.getCapturedArgCount)(n => serialized.getCapturedArg(n)) |