Index: src/main/java/org/apache/jackrabbit/core/query/lucene/directory/FSDirectoryManager.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/query/lucene/directory/FSDirectoryManager.java (revision 797412) +++ src/main/java/org/apache/jackrabbit/core/query/lucene/directory/FSDirectoryManager.java (working copy) @@ -73,11 +73,15 @@ return pathname.isDirectory(); } }); - String[] names = new String[dirs.length]; - for (int i = 0; i < dirs.length; i++) { - names[i] = dirs[i].getName(); + if (dirs != null) { + String[] names = new String[dirs.length]; + for (int i = 0; i < dirs.length; i++) { + names[i] = dirs[i].getName(); + } + return names; + } else { + throw new IOException("listFiles for " + baseDir.getPath() + " returned null"); } - return names; } /** @@ -90,10 +94,15 @@ return true; } // delete files first - for (File file : directory.listFiles()) { - if (!file.delete()) { - return false; + File[] files = directory.listFiles(); + if (files != null) { + for (File file : files) { + if (!file.delete()) { + return false; + } } + } else { + return false; } // now delete directory itself return directory.delete(); Index: src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java (revision 797412) +++ src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java (working copy) @@ -404,7 +404,12 @@ throws IOException { // make sure a reader is available during long updates if (add.size() > handler.getBufferSize()) { - getIndexReader().release(); + try { + getIndexReader().release(); + } catch (IOException e) { + // do not fail if an exception is thrown here + log.warn("unable to prepare index reader for queries during update", e); + } } synchronized (updateMonitor) { @@ -574,9 +579,18 @@ indexName = indexNames.newName(); } while (directoryManager.hasDirectory(indexName)); } - PersistentIndex index = new PersistentIndex(indexName, - handler.getTextAnalyzer(), handler.getSimilarity(), - cache, indexingQueue, directoryManager); + PersistentIndex index; + try { + index = new PersistentIndex(indexName, + handler.getTextAnalyzer(), handler.getSimilarity(), + cache, indexingQueue, directoryManager); + } catch (IOException e) { + // do some clean up + if (!directoryManager.delete(indexName)) { + deletable.add(indexName); + } + throw e; + } index.setMaxFieldLength(handler.getMaxFieldLength()); index.setUseCompoundFile(handler.getUseCompoundFile()); index.setTermInfosIndexDivisor(handler.getTermInfosIndexDivisor());