You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2011/11/08 11:20:02 UTC

svn commit: r1199175 - /jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeListSmall.java

Author: thomasm
Date: Tue Nov  8 10:20:02 2011
New Revision: 1199175

URL: http://svn.apache.org/viewvc?rev=1199175&view=rev
Log:
Fix a concurrency problem.

Modified:
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeListSmall.java

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeListSmall.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeListSmall.java?rev=1199175&r1=1199174&r2=1199175&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeListSmall.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeListSmall.java Tue Nov  8 10:20:02 2011
@@ -36,7 +36,7 @@ public class NodeListSmall implements No
     String[] names;
     long[] children;
     private int[] sort;
-    private int last;
+    private int lastNameIndexCache;
 
     NodeListSmall() {
         this(EMPTY_STRING_ARRAY, EMPTY_LONG_ARRAY, EMPTY_INTEGER_ARRAY, 0);
@@ -58,6 +58,8 @@ public class NodeListSmall implements No
     }
 
     private int find(String name) {
+        // copy, to avoid concurrency issues
+        int last = lastNameIndexCache;
         if (last < size && names[sort[last]].equals(name)) {
             return last;
         }
@@ -66,7 +68,7 @@ public class NodeListSmall implements No
             int test = (min + max) >>> 1;
             int compare = names[sort[test]].compareTo(name);
             if (compare == 0) {
-                last = test;
+                lastNameIndexCache = test;
                 return test;
             }
             if (compare > 0) {