You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2010/05/25 18:05:04 UTC

svn commit: r948082 - in /lucene/dev/trunk/lucene: CHANGES.txt src/java/org/apache/lucene/index/IndexWriter.java

Author: mikemccand
Date: Tue May 25 16:05:03 2010
New Revision: 948082

URL: http://svn.apache.org/viewvc?rev=948082&view=rev
Log:
LUCENE-2476: release write lock on any exception during IndexWriter ctor

Modified:
    lucene/dev/trunk/lucene/CHANGES.txt
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java

Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=948082&r1=948081&r2=948082&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Tue May 25 16:05:03 2010
@@ -402,6 +402,10 @@ Bug fixes
   demo resulted in ArrayIndexOutOfBoundsException.  
   (Sami Siren via Robert Muir)
 
+* LUCENE-2476: If any exception is hit init'ing IW, release the write
+  lock (previously we only released on IOException).  (Tamas Cservenak
+  via Mike McCandless)
+
 New features
 
 * LUCENE-2128: Parallelized fetching document frequencies during weight

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java?rev=948082&r1=948081&r2=948082&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java Tue May 25 16:05:03 2010
@@ -1110,9 +1110,12 @@ public class IndexWriter implements Clos
     }
 
     writeLock = directory.makeLock(WRITE_LOCK_NAME);
+
     if (!writeLock.obtain(writeLockTimeout)) // obtain write lock
       throw new LockObtainFailedException("Index locked for write: " + writeLock);
 
+    boolean success = false;
+
     try {
       if (create) {
         // Try to read first.  This is to allow create
@@ -1179,10 +1182,20 @@ public class IndexWriter implements Clos
         messageState();
       }
 
-    } catch (IOException e) {
-      writeLock.release();
-      writeLock = null;
-      throw e;
+      success = true;
+
+    } finally {
+      if (!success) {
+        if (infoStream != null) {
+          message("init: hit exception on init; releasing write lock");
+        }
+        try {
+          writeLock.release();
+        } catch (Throwable t) {
+          // don't mask the original exception
+        }
+        writeLock = null;
+      }
     }
   }