From dd148de5a875dd8d691ffdd983b7f2b978a148df Mon Sep 17 00:00:00 2001 From: Eugene Burmako Date: Mon, 4 Feb 2013 11:08:21 +0100 Subject: synchronizes pendingVolatiles Called from isVolatile, which is called from isStable, which is a part of the public reflection API. --- src/reflect/scala/reflect/internal/Types.scala | 4 ---- src/reflect/scala/reflect/runtime/SynchronizedSymbols.scala | 2 ++ 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/reflect/scala/reflect/internal/Types.scala b/src/reflect/scala/reflect/internal/Types.scala index 0afbdc56c8..6d91948d66 100644 --- a/src/reflect/scala/reflect/internal/Types.scala +++ b/src/reflect/scala/reflect/internal/Types.scala @@ -2066,10 +2066,6 @@ trait Types extends api.Types { self: SymbolTable => def apply(value: Constant) = unique(new UniqueConstantType(value)) } - /* Syncnote: The `volatile` var and `pendingVolatiles` mutable set need not be protected - * with synchronized, because they are accessed only from isVolatile, which is called only from - * Typer. - */ private var volatileRecursions: Int = 0 private val pendingVolatiles = new mutable.HashSet[Symbol] diff --git a/src/reflect/scala/reflect/runtime/SynchronizedSymbols.scala b/src/reflect/scala/reflect/runtime/SynchronizedSymbols.scala index 85bd9ff8b6..5a0ac01ac4 100644 --- a/src/reflect/scala/reflect/runtime/SynchronizedSymbols.scala +++ b/src/reflect/scala/reflect/runtime/SynchronizedSymbols.scala @@ -61,6 +61,8 @@ private[reflect] trait SynchronizedSymbols extends internal.Symbols { self: Symb } } + override def isStable: Boolean = gilSynchronized { super.isStable } + // ------ creators ------------------------------------------------------------------- override protected def createAbstractTypeSymbol(name: TypeName, pos: Position, newFlags: Long): AbstractTypeSymbol = -- cgit v1.2.3