aboutsummaryrefslogtreecommitdiff
path: root/stage1/ClassLoaderCache.scala
diff options
context:
space:
mode:
authorChristopher Vogt <oss.nsp@cvogt.org>2016-03-14 18:17:55 -0400
committerChristopher Vogt <oss.nsp@cvogt.org>2016-03-19 21:13:48 -0400
commit10fe5a8ca1518381ebfa655be4358276c990508e (patch)
treec633e98ebc42c9d7873cbf52a84befaf76fd73d7 /stage1/ClassLoaderCache.scala
parentc095f435b68272d4ae0409ab4c9466145609710e (diff)
downloadcbt-10fe5a8ca1518381ebfa655be4358276c990508e.tar.gz
cbt-10fe5a8ca1518381ebfa655be4358276c990508e.tar.bz2
cbt-10fe5a8ca1518381ebfa655be4358276c990508e.zip
minor enhancements to classloading
Diffstat (limited to 'stage1/ClassLoaderCache.scala')
-rw-r--r--stage1/ClassLoaderCache.scala24
1 files changed, 13 insertions, 11 deletions
diff --git a/stage1/ClassLoaderCache.scala b/stage1/ClassLoaderCache.scala
index 35008f0..05589d1 100644
--- a/stage1/ClassLoaderCache.scala
+++ b/stage1/ClassLoaderCache.scala
@@ -4,15 +4,15 @@ import java.net._
import java.util.concurrent.ConcurrentHashMap
class ClassLoaderCache(logger: Logger){
- val permanent = new KeyLockedLazyCache(
+ val persistent = new KeyLockedLazyCache(
NailgunLauncher.classLoaderCache.asInstanceOf[ConcurrentHashMap[String,AnyRef]],
NailgunLauncher.classLoaderCache.asInstanceOf[ConcurrentHashMap[AnyRef,ClassLoader]],
- logger
+ Some(logger)
)
val transient = new KeyLockedLazyCache(
new ConcurrentHashMap[String,AnyRef],
new ConcurrentHashMap[AnyRef,ClassLoader],
- logger
+ Some(logger)
)
}
@@ -25,21 +25,23 @@ simultaneously without a deadlock.
final private[cbt] class KeyLockedLazyCache[Key <: AnyRef,Value <: AnyRef](
keys: ConcurrentHashMap[Key,AnyRef],
builds: ConcurrentHashMap[AnyRef,Value],
- logger: Logger
+ logger: Option[Logger]
){
def get( key: Key, value: => Value ): Value = {
- val keyObject = keys.synchronized{
+ val keyObject = keys.synchronized{
if( ! (keys containsKey key) ){
- logger.resolver("CACHE MISS: " ++ key.toString)
- keys.put( key, new LockableKey )
+ val keyObject = new LockableKey
+ logger.foreach(_.resolver("CACHE MISS: " ++ key.toString))
+ keys.put( key, keyObject )
+ keyObject
} else {
- logger.resolver("CACHE HIT: " ++ key.toString)
+ val keyObject = keys get key
+ logger.foreach(_.resolver("CACHE HIT: " ++ keyObject.toString ++ " -> " ++ key.toString))
+ keyObject
}
- keys get key
}
import collection.JavaConversions._
- logger.resolver("CACHE: \n" ++ keys.mkString("\n"))
- def k = ClassPath(new java.io.File("c")).asInstanceOf[Key]
+ //logger.resolver("CACHE: \n" ++ keys.mkString("\n"))
// synchronizing on key only, so asking for a particular key does
// not block the whole cache, but just that cache entry
key.synchronized{