Index: lucene/src/test/org/apache/lucene/index/TestGlobalFieldNumbers.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestGlobalFieldNumbers.java (revision 1207504) +++ lucene/src/test/org/apache/lucene/index/TestGlobalFieldNumbers.java (working copy) @@ -75,7 +75,6 @@ for (String string : files) { assertFalse(string.endsWith(".fnx")); } - assertFNXFiles(dir, "_2.fnx"); writer.close(); assertFNXFiles(dir, "_2.fnx"); } @@ -127,7 +126,6 @@ d.add(new BinaryField("f3", new byte[] { 1, 2, 3 })); writer.addDocument(d); writer.commit(); - assertFNXFiles(dir, "_2.fnx"); writer.close(); assertFNXFiles(dir, "_2.fnx"); } Index: lucene/src/test/org/apache/lucene/index/TestIndexWriter.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestIndexWriter.java (revision 1207504) +++ lucene/src/test/org/apache/lucene/index/TestIndexWriter.java (working copy) @@ -149,8 +149,6 @@ public static void assertNoUnreferencedFiles(Directory dir, String message) throws IOException { String[] startFiles = dir.listAll(); - SegmentInfos infos = new SegmentInfos(); - infos.read(dir); new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random))).rollback(); String[] endFiles = dir.listAll(); Index: lucene/src/java/org/apache/lucene/index/SegmentInfos.java =================================================================== --- lucene/src/java/org/apache/lucene/index/SegmentInfos.java (revision 1207504) +++ lucene/src/java/org/apache/lucene/index/SegmentInfos.java (working copy) @@ -875,10 +875,10 @@ */ files.add(segmentFileName); } - if (lastGlobalFieldMapVersion > 0) { - files.add(getGlobalFieldNumberName(lastGlobalFieldMapVersion)); - } } + if (lastGlobalFieldMapVersion > 0) { + files.add(getGlobalFieldNumberName(lastGlobalFieldMapVersion)); + } final int size = size(); for(int i=0;i filesToCommit; + final SegmentInfos segmentInfos; // the segments final FieldNumberBiMap globalFieldNumberMap; @@ -2654,8 +2656,9 @@ // to commit. This is important in case, eg, while // we are trying to sync all referenced files, a // merge completes which would otherwise have - // removed the files we are now syncing. - deleter.incRef(toCommit, false); + // removed the files we are now syncing. + filesToCommit = toCommit.files(directory, false); + deleter.incRef(filesToCommit); } success = true; } finally { @@ -2680,7 +2683,8 @@ } finally { if (!success) { synchronized (this) { - deleter.decRef(toCommit); + deleter.decRef(filesToCommit); + filesToCommit = null; } } } @@ -2780,8 +2784,9 @@ rollbackSegments = pendingCommit.createBackupSegmentInfos(true); deleter.checkpoint(pendingCommit, true); } finally { - // Matches the incRef done in startCommit: - deleter.decRef(pendingCommit); + // Matches the incRef done in prepareCommit: + deleter.decRef(filesToCommit); + filesToCommit = null; pendingCommit = null; notifyAll(); } @@ -3796,7 +3801,8 @@ if (infoStream != null) { infoStream.message("IW", " skip startCommit(): no changes pending"); } - deleter.decRef(toSync); + deleter.decRef(filesToCommit); + filesToCommit = null; return; } @@ -3857,7 +3863,8 @@ } // Hit exception - deleter.decRef(toSync); + deleter.decRef(filesToCommit); + filesToCommit = null; } } }