Author: jukka
Date: Wed Mar 19 01:35:05 2014
New Revision: 1579111
URL: http://svn.apache.org/r1579111
Log:
OAK-1566: ArrayIndexOutOfBoundsException in Segment.getRefId()
Simplify SegmentWriter.getSegmentRef()
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java?rev=1579111&r1=1579110&r2=1579111&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
Wed Mar 19 01:35:05 2014
@@ -239,24 +239,16 @@ public class SegmentWriter {
}
private synchronized int getSegmentRef(SegmentId segmentId) {
- if (segmentId == segment.getSegmentId()) {
- return 0;
- }
-
- long msb = segmentId.getMostSignificantBits();
- long lsb = segmentId.getLeastSignificantBits();
-
int refcount = segment.getRefCount();
- for (int refid = 1; refid < refcount; refid++) {
- if (msb == segment.readLong(refid * 16)
- && lsb == segment.readLong(refid * 16 + 8)) {
- return refid;
+ for (int index = 0; index < refcount; index++) {
+ if (segmentId == segment.getRefId(index)) {
+ return index;
}
}
- ByteBuffer data = ByteBuffer.wrap(buffer);
- data.putLong(refcount * 16, msb);
- data.putLong(refcount * 16 + 8, lsb);
+ ByteBuffer.wrap(buffer, refcount * 16, 16)
+ .putLong(segmentId.getMostSignificantBits())
+ .putLong(segmentId.getLeastSignificantBits());
buffer[Segment.REF_COUNT_OFFSET] = (byte) refcount;
return refcount;
}