summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@typesafe.com>2016-08-09 16:49:04 +0200
committerGitHub <noreply@github.com>2016-08-09 16:49:04 +0200
commit88344b71a1c823600f5b255b2752d85dfbe1096b (patch)
tree6b2d83f6f2ddd8b50f581222757709dc68370eb1 /src/library
parenta02b913367add3629295c0d3451ebfac586e6181 (diff)
parentc1bd857318b01b223b3f5dbd99aa2e71b1b232d4 (diff)
downloadscala-88344b71a1c823600f5b255b2752d85dfbe1096b.tar.gz
scala-88344b71a1c823600f5b255b2752d85dfbe1096b.tar.bz2
scala-88344b71a1c823600f5b255b2752d85dfbe1096b.zip
Merge pull request #5315 from retronym/topic/race
Fix race condition in lambda deserialization
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/runtime/LambdaDeserializer.scala16
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))