summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/internal/util
diff options
context:
space:
mode:
authorDen Shabalin <den.shabalin@gmail.com>2013-10-11 20:25:26 +0200
committerDen Shabalin <den.shabalin@gmail.com>2013-10-18 17:24:52 +0200
commit68e9e267e63f13ce2e99843df989a1306f91cd19 (patch)
tree78b79a4dea3864917fb1bf9ad207c4c8610b407b /src/reflect/scala/reflect/internal/util
parentcf58d7c88c35c41f749298de5b0de09fca72df1b (diff)
downloadscala-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.scala14
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();
}
}