You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2006/12/01 10:21:06 UTC

svn commit: r481196 - /jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/MLRUItemStateCache.java

Author: stefan
Date: Fri Dec  1 01:21:05 2006
New Revision: 481196

URL: http://svn.apache.org/viewvc?view=rev&rev=481196
Log:
JCR-619: applied patch cacheManager7.txt that fixes dead lock issue

Modified:
    jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/MLRUItemStateCache.java

Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/MLRUItemStateCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/MLRUItemStateCache.java?view=diff&rev=481196&r1=481195&r2=481196
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/MLRUItemStateCache.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/MLRUItemStateCache.java Fri Dec  1 01:21:05 2006
@@ -93,8 +93,8 @@
      * {@inheritDoc}
      */
     public ItemState retrieve(ItemId id) {
+        touch();
         synchronized (cache) {
-            touch();
             Entry entry = (Entry) cache.remove(id);
             if (entry != null) {
                 // 'touch' item, by adding at end of list
@@ -110,8 +110,8 @@
      * {@inheritDoc}
      */
     public void update(ItemId id) {
+        touch();
         synchronized (cache) {
-            touch();
             Entry entry = (Entry) cache.get(id);
             if (entry != null) {
                 totalMem -= entry.size;
@@ -125,8 +125,8 @@
      * {@inheritDoc}
      */
     public void cache(ItemState state) {
+        touch();
         synchronized (cache) {
-            touch();
             ItemId id = state.getId();
             if (cache.containsKey(id)) {
                 log.warn("overwriting cached entry " + id);
@@ -144,9 +144,12 @@
 
     private void shrinkIfRequired() {
         // remove items, if too many
-        while (totalMem > maxMem) {
-            ItemId id = (ItemId) cache.firstKey();
-            evict(id);
+        synchronized (cache) {
+            while (totalMem > maxMem) {
+                ItemId id = (ItemId) cache.firstKey();
+                Entry entry = (Entry) cache.remove(id);
+                totalMem -= entry.size;
+            }
         }
     }
 
@@ -154,8 +157,8 @@
      * {@inheritDoc}
      */
     public void evict(ItemId id) {
+        touch();
         synchronized (cache) {
-            touch();
             Entry entry = (Entry) cache.remove(id);
             if (entry != null) {
                 totalMem -= entry.size;
@@ -287,7 +290,7 @@
      */
     public void dispose() {
         synchronized (cache) {
-            if(accessListener != null) {
+            if (accessListener != null) {
                 accessListener.disposeCache(this);
             }
         }