Author: desruisseaux
Date: Wed May 29 10:11:12 2013
New Revision: 1487429

URL: http://svn.apache.org/r1487429
Log:
Discard obolete marks.

Modified:
    
sis/branches/JDK7/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ChannelImageInputStream.java

Modified: 
sis/branches/JDK7/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ChannelImageInputStream.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK7/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ChannelImageInputStream.java?rev=1487429&r1=1487428&r2=1487429&view=diff
==============================================================================
--- 
sis/branches/JDK7/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ChannelImageInputStream.java
 [UTF-8] (original)
+++ 
sis/branches/JDK7/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ChannelImageInputStream.java
 [UTF-8] Wed May 29 10:11:12 2013
@@ -88,10 +88,10 @@ public class ChannelImageInputStream ext
      */
     private static final class Mark {
         final long position;
-        final int  bitOffset;
-        final Mark next;
+        final byte bitOffset;
+        Mark next;
 
-        Mark(long position, int bitOffset, Mark next) {
+        Mark(long position, byte bitOffset, Mark next) {
             this.position  = position;
             this.bitOffset = bitOffset;
             this.next      = next;
@@ -418,7 +418,7 @@ loop:   while ((c = read()) >= 0) {
      */
     @Override
     public final void mark() {
-        mark = new Mark(getStreamPosition(), getBitOffset(), mark);
+        mark = new Mark(getStreamPosition(), (byte) getBitOffset(), mark);
     }
 
     /**
@@ -478,6 +478,20 @@ loop:   while ((c = read()) >= 0) {
         buffer.position(n); // Number of bytes to forget.
         buffer.compact().position(p).limit(r);
         setStreamPosition(currentPosition);
+
+        // Discard obolete marks.
+        Mark parent = null;
+        for (Mark m = mark; m != null; m = m.next) {
+            if (m.position < position) {
+                if (parent != null) {
+                    parent.next = null;
+                } else {
+                    mark = null;
+                }
+                break;
+            }
+            parent = m;
+        }
     }
 
     /**


Reply via email to