[ 
https://issues.apache.org/jira/browse/JCS-158?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15103763#comment-15103763
 ] 

Wiktor N commented on JCS-158:
------------------------------

Great, thanks for quick fix

> NullPointerException in IndexedDiskCache.addToRecycleBin(...)
> -------------------------------------------------------------
>
>                 Key: JCS-158
>                 URL: https://issues.apache.org/jira/browse/JCS-158
>             Project: Commons JCS
>          Issue Type: Bug
>          Components: Indexed Disk Cache
>    Affects Versions: jcs-2.0-beta-1
>            Reporter: Wiktor N
>            Assignee: Thomas Vandahl
>             Fix For: jcs-2.0-beta-2
>
>
> One of our users got the following exception:
> java.lang.NullPointerException
>       at 
> org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCache.addToRecycleBin(IndexedDiskCache.java:1181)
>       at 
> org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCache$LRUMapSizeLimited.processRemovedLRU(IndexedDiskCache.java:1785)
>       at 
> org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCache$LRUMapSizeLimited.processRemovedLRU(IndexedDiskCache.java:1684)
>       at 
> org.apache.commons.jcs.utils.struct.AbstractLRUMap.put(AbstractLRUMap.java:344)
>       at 
> org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCache$LRUMapSizeLimited.put(IndexedDiskCache.java:1732)
>       at 
> org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCache$LRUMapSizeLimited.put(IndexedDiskCache.java:1684)
>       at 
> org.apache.commons.jcs.utils.struct.AbstractLRUMap.putAll(AbstractLRUMap.java:187)
>       at 
> org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCache.loadKeys(IndexedDiskCache.java:343)
>       at 
> org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCache.initializeStoreFromPersistedData(IndexedDiskCache.java:286)
>       at 
> org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCache.initializeKeysAndData(IndexedDiskCache.java:250)
>       at 
> org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCache.<init>(IndexedDiskCache.java:182)
>       at 
> org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory.createCache(IndexedDiskCacheFactory.java:60)
>       at 
> org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory.createCache(IndexedDiskCacheFactory.java:33)
> My guess is, that during cache initialization doOptimizeRealTime() spawned a 
> new thread calling optimizeFile().
> optimizeFile() does all actions governed by storageLock.writeLock(), but 
> there are no guarantees, in which order addToRecycleBin() will see changes 
> done by optimizeFile.
> I see two solutions to this problem:
> 1. Protect addToRecycleBin using storageLock.readLock() to ensure the same 
> order of reads and writes with optimizeFile
> 2. Use volatile keyword on doRecycle / recycle objects and use Java Memory 
> Model guarantees to order writes and reads in this two methods
> My feeling is that 1st solution is more coherent with current approach within 
> JCS.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to