Author: rvesse
Date: Tue Jan 29 12:42:32 2013
New Revision: 1439864

URL: http://svn.apache.org/viewvc?rev=1439864&view=rev
Log:
Add a separate finished flag to PipedRDFIterator which is set when the end 
marker is seen, if this is set hasNext() returns false.

This is necessary because setting closedByReader (as was previously done and I 
removed already) caused hasNext() to throw a spurious exception if the caller 
invoked hasNext() multiple times.  Setting a separate flag allows us to 
properly return false

Modified:
    
jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/lang/PipedRDFIterator.java

Modified: 
jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/lang/PipedRDFIterator.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/lang/PipedRDFIterator.java?rev=1439864&r1=1439863&r2=1439864&view=diff
==============================================================================
--- 
jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/lang/PipedRDFIterator.java
 (original)
+++ 
jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/lang/PipedRDFIterator.java
 Tue Jan 29 12:42:32 2013
@@ -64,6 +64,7 @@ public class PipedRDFIterator<T> impleme
 
     private volatile boolean closedByReader = false ;
     private volatile boolean closedByWriter = false ;
+    private volatile boolean finished = false;
     private volatile Thread readSide ;
     private volatile Thread writeSide ;
     
@@ -146,6 +147,9 @@ public class PipedRDFIterator<T> impleme
         if (closedByReader)
             throw new RiotException("Pipe closed");
         
+        if (finished)
+            return false;
+        
         readSide = Thread.currentThread();
         
         if (slot != null)
@@ -176,6 +180,7 @@ public class PipedRDFIterator<T> impleme
         // When the end marker is seen set slot to null
         if (slot == endMarker)
         {
+            finished = true;
             slot = null ;
             return false ;
         }


Reply via email to