[ http://issues.apache.org/jira/browse/JCR-619?page=all ]
Thomas Mueller updated JCR-619:
-------------------------------
Attachment: cacheManager6.txt
A Java level deadlock could occur with the current CacheManager, if:
Thread 1: CacheManager.resizeAll(holding a lock on the CacheManager) calls
Cache.setMaxMemorySize (which tries to lock MLRUItemStateCache.cache)
Thread 2: From the same object, MLRUItemStateCache.dispose (holding a lock on
MLRUItemStateCache.cache) calls CacheManager.disposeCache (which tries to lock
CacheManager)
I made a patch, where CacheManager.disposeCache is not synchronized on the
CacheManager. Instead, it synchronizes on the caches HashMap, where it removes
the object (so that modifications to the caches map are synchronized, as this
is needed). CacheManager.add now also synchronizes on the caches map.
This should solve the problem.
> CacheManager (Memory Management in Jackrabbit)
> ----------------------------------------------
>
> Key: JCR-619
> URL: http://issues.apache.org/jira/browse/JCR-619
> Project: Jackrabbit
> Issue Type: New Feature
> Components: core
> Affects Versions: 1.1
> Reporter: Thomas Mueller
> Assigned To: Stefan Guggisberg
> Fix For: 1.2
>
> Attachments: cacheManager.txt, cacheManager2.txt, cacheManager5.txt,
> cacheManager6.txt
>
>
> Jackrabbit can run out of memory because the the combined size of the various
> caches is not managed. The biggest problem (for me) is the combined size of
> the o.a.j.core.state.MLRUItemStateCache caches. Each session seems to create
> a few (?) of those caches, and each one is limited to 4 MB by default.
> I have implemented a dynamic (cache-) memory management service that
> distributes a fixed amount of memory dynamically to all those caches.
> Here is the patch
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira