From f42d50ab33a829322618181375cb6c5f2e71118a Mon Sep 17 00:00:00 2001 From: Christopher Vogt Date: Thu, 9 Feb 2017 21:38:48 -0500 Subject: various smaller changes --- stage1/KeyLockedLazyCache.scala | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'stage1/KeyLockedLazyCache.scala') diff --git a/stage1/KeyLockedLazyCache.scala b/stage1/KeyLockedLazyCache.scala index 2047b81..aac32a3 100644 --- a/stage1/KeyLockedLazyCache.scala +++ b/stage1/KeyLockedLazyCache.scala @@ -10,7 +10,11 @@ final private[cbt] class KeyLockedLazyCache[T <: AnyRef]( val hashMap: java.util.Map[AnyRef,AnyRef], logger: Option[Logger] ){ + final val seen = new ThreadLocal[collection.mutable.Set[AnyRef]](){ + override protected def initialValue = collection.mutable.Set[AnyRef](); + } def get( key: AnyRef, value: => T ): T = { + seen.get.add( key ); val lockableKey = hashMap.synchronized{ if( ! (hashMap containsKey key) ){ val lockableKey = new LockableKey @@ -35,6 +39,10 @@ final private[cbt] class KeyLockedLazyCache[T <: AnyRef]( } } def update( key: AnyRef, value: T ): T = { + assert( + !seen.get.contains( key ), + "Thread tries to update cache key after observing it: " + key + ) val lockableKey = hashMap get key lockableKey.synchronized{ hashMap.put( lockableKey, value ) -- cgit v1.2.3