summaryrefslogblamecommitdiff
path: root/src/reflect/scala/reflect/runtime/Gil.scala
blob: 0edb1e5748268b99fc0daf8527650953e1d04c77 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11










                                                                                                                   
                                                                     

                                                         







                                


     
package scala.reflect
package runtime

private[reflect] trait Gil {
  self: SymbolTable =>

  // fixme... please...
  // there are the following avenues of optimization we discussed with Roland:
  // 1) replace PackageScope locks with ConcurrentHashMap, because PackageScope materializers seem to be idempotent
  // 2) unlock unpickling completers by verifying that they are idempotent or moving non-idempotent parts
  // 3) remove the necessity in global state for isSubType
  private lazy val gil = new java.util.concurrent.locks.ReentrantLock

  @inline final def gilSynchronized[T](body: => T): T = {
    if (isCompilerUniverse) body
    else {
      try {
        gil.lock()
        body
      } finally {
        gil.unlock()
      }
    }
  }
}