diff options
author | Den Shabalin <den.shabalin@gmail.com> | 2013-10-11 20:25:26 +0200 |
---|---|---|
committer | Den Shabalin <den.shabalin@gmail.com> | 2013-10-18 17:24:52 +0200 |
commit | 68e9e267e63f13ce2e99843df989a1306f91cd19 (patch) | |
tree | 78b79a4dea3864917fb1bf9ad207c4c8610b407b /src/reflect/scala/reflect/internal/util | |
parent | cf58d7c88c35c41f749298de5b0de09fca72df1b (diff) | |
download | scala-68e9e267e63f13ce2e99843df989a1306f91cd19.tar.gz scala-68e9e267e63f13ce2e99843df989a1306f91cd19.tar.bz2 scala-68e9e267e63f13ce2e99843df989a1306f91cd19.zip |
use concurrent hash map with atomic integers
This should ensure that concurrent access to the
fresh name creator is properly synchronized.
Diffstat (limited to 'src/reflect/scala/reflect/internal/util')
-rw-r--r-- | src/reflect/scala/reflect/internal/util/FreshNameCreator.scala | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/reflect/scala/reflect/internal/util/FreshNameCreator.scala b/src/reflect/scala/reflect/internal/util/FreshNameCreator.scala index c8347cfeaa..3e54de8e1e 100644 --- a/src/reflect/scala/reflect/internal/util/FreshNameCreator.scala +++ b/src/reflect/scala/reflect/internal/util/FreshNameCreator.scala @@ -6,12 +6,13 @@ package scala.reflect.internal package util +import java.util.concurrent.ConcurrentHashMap +import java.util.concurrent.atomic.AtomicLong import scala.collection.mutable import scala.reflect.NameTransformer class FreshNameCreator { - protected var counter = 0 - protected val counters = mutable.HashMap[String, Int]() withDefaultValue 0 + protected val counters = new ConcurrentHashMap[String, AtomicLong]() /** * Create a fresh name with the given prefix. It is guaranteed @@ -20,12 +21,7 @@ class FreshNameCreator { */ def newName(prefix: String): String = { val safePrefix = NameTransformer.encode(prefix) - counters(safePrefix) += 1 - safePrefix + counters(safePrefix) - } - - def newName(): String = { - counter += 1 - "$" + counter + "$" + counters.putIfAbsent(safePrefix, new AtomicLong(0)); + safePrefix + counters.get(safePrefix).incrementAndGet(); } } |