You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2008/01/10 19:21:52 UTC

svn commit: r610860 - /lucene/java/branches/lucene_2_3/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiDocMaker.java

Author: mikemccand
Date: Thu Jan 10 10:21:51 2008
New Revision: 610860

URL: http://svn.apache.org/viewvc?rev=610860&view=rev
Log:
LUCENE-1117 on 2.3 branch: fix EnwikiDocMaker to not hang when the producer thread hits exception

Modified:
    lucene/java/branches/lucene_2_3/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiDocMaker.java

Modified: lucene/java/branches/lucene_2_3/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiDocMaker.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_2_3/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiDocMaker.java?rev=610860&r1=610859&r2=610860&view=diff
==============================================================================
--- lucene/java/branches/lucene_2_3/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiDocMaker.java (original)
+++ lucene/java/branches/lucene_2_3/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiDocMaker.java Thu Jan 10 10:21:51 2008
@@ -47,6 +47,7 @@
   class Parser extends DefaultHandler implements Runnable {
 
     Thread t;
+    boolean threadDone;
 
     public void run() {
 
@@ -86,8 +87,12 @@
         throw new RuntimeException(sae);
       } catch (IOException ioe) {
         throw new RuntimeException(ioe);
+      } finally {
+        synchronized(this) {
+          threadDone = true;
+          notify();
+        }
       }
-
     }
 
     String[] tuple;
@@ -95,13 +100,14 @@
 
     String[] next() throws NoMoreDataException {
       if (t == null) {
+        threadDone = false;
         t = new Thread(this);
         t.setDaemon(true);
         t.start();
       }
       String[] result;
       synchronized(this){
-        while(tuple == null && nmde == null){
+        while(tuple == null && nmde == null && !threadDone) {
           try {
             wait();
           } catch (InterruptedException ie) {
@@ -113,6 +119,12 @@
           t = null;
           throw nmde;
         }
+        if (t != null && threadDone)
+          // The thread has exited yet did not hit end of
+          // data, so this means it hit an exception.  We
+          // throw NoMorDataException here to force
+          // benchmark to stop the current alg:
+          throw new NoMoreDataException();
         result = tuple;
         tuple = null;
         notify();