Index: src/test/org/apache/lucene/index/TestIndexReaderReopen.java
===================================================================
--- src/test/org/apache/lucene/index/TestIndexReaderReopen.java	(revision 1052168)
+++ src/test/org/apache/lucene/index/TestIndexReaderReopen.java	(working copy)
@@ -57,6 +57,7 @@
 
       @Override
       protected void modifyIndex(int i) throws IOException {
+        System.out.println("modifyIndex i:"+i);
         TestIndexReaderReopen.modifyIndex(i, dir1);
       }
 
Index: src/java/org/apache/lucene/index/DocumentsWriterThreadPool.java
===================================================================
--- src/java/org/apache/lucene/index/DocumentsWriterThreadPool.java	(revision 1052168)
+++ src/java/org/apache/lucene/index/DocumentsWriterThreadPool.java	(working copy)
@@ -230,6 +230,10 @@
     return getPerThreadIterator(allThreadStates);
   }
 
+  int getNumThreads() {
+    return allThreadStates.length;
+  }
+  
   private static final Iterator<DocumentsWriterPerThread> getPerThreadIterator(final ThreadState[] localAllThreads) {
     return new Iterator<DocumentsWriterPerThread>() {
       int i = 0;
Index: src/java/org/apache/lucene/index/DocumentsWriterPerThread.java
===================================================================
--- src/java/org/apache/lucene/index/DocumentsWriterPerThread.java	(revision 1052168)
+++ src/java/org/apache/lucene/index/DocumentsWriterPerThread.java	(working copy)
@@ -82,7 +82,7 @@
   };
 
   // Deletes for our still-in-RAM (to be flushed next) segment
-  private SegmentDeletes pendingDeletes = new SegmentDeletes();
+  SegmentDeletes pendingDeletes = new SegmentDeletes();
 
   static class DocState {
     final DocumentsWriterPerThread docWriter;
Index: src/java/org/apache/lucene/index/DocumentsWriter.java
===================================================================
--- src/java/org/apache/lucene/index/DocumentsWriter.java	(revision 1052168)
+++ src/java/org/apache/lucene/index/DocumentsWriter.java	(working copy)
@@ -176,9 +176,16 @@
     this.chain = chain;
     flushControl = writer.flushControl;
   }
-
+  
+  boolean hasThreads() {
+    return threadPool.getNumThreads() > 0;
+  }
+  
   boolean deleteQueries(Query... queries) {
     final boolean doFlush = flushControl.waitUpdate(0, queries.length);
+    
+    assert hasThreads();
+    
     Iterator<DocumentsWriterPerThread> it = threadPool.getPerThreadIterator();
     while (it.hasNext()) {
       it.next().deleteQueries(queries);
@@ -188,6 +195,9 @@
 
   boolean deleteQuery(Query query) {
     final boolean doFlush = flushControl.waitUpdate(0, 1);
+    
+    assert hasThreads();
+    
     Iterator<DocumentsWriterPerThread> it = threadPool.getPerThreadIterator();
     while (it.hasNext()) {
       it.next().deleteQuery(query);
@@ -197,15 +207,30 @@
 
   boolean deleteTerms(Term... terms) {
     final boolean doFlush = flushControl.waitUpdate(0, terms.length);
+    
+    assert hasThreads();
+    
     Iterator<DocumentsWriterPerThread> it = threadPool.getPerThreadIterator();
     while (it.hasNext()) {
       it.next().deleteTerms(terms);
     }
     return doFlush;
   }
-
+  
+  void deleteTermNoWait(Term term) {
+    assert hasThreads();
+    
+    Iterator<DocumentsWriterPerThread> it = threadPool.getPerThreadIterator();
+    while (it.hasNext()) {
+      it.next().deleteTerm(term);
+    }
+  }
+  
   boolean deleteTerm(Term term, boolean skipWait) {
     final boolean doFlush = flushControl.waitUpdate(0, 1, skipWait);
+    
+    assert hasThreads();
+    
     Iterator<DocumentsWriterPerThread> it = threadPool.getPerThreadIterator();
     while (it.hasNext()) {
       it.next().deleteTerm(term);
@@ -325,14 +350,29 @@
     return numDocsInRAM.get() != 0;
     //return numDocsInRAM.get() != 0 || pendingDeletes.any();
   }
-
+  
   // for testing
-  public SegmentDeletes getPendingDeletes() {
-    return null;
-    // nocommit
-    //return pendingDeletes;
+  public int getBufferedDeleteTermsSize() {
+    int total = 0;
+    Iterator<DocumentsWriterPerThread> it = threadPool.getPerThreadIterator();
+    while (it.hasNext()) {
+      DocumentsWriterPerThread dwpt = it.next();
+      total += dwpt.pendingDeletes.terms.size();
+    }
+    return total;
   }
 
+  //for testing
+  public int getNumBufferedDeleteTerms() {
+    int total = 0;
+    Iterator<DocumentsWriterPerThread> it = threadPool.getPerThreadIterator();
+    while (it.hasNext()) {
+      DocumentsWriterPerThread dwpt = it.next();
+      total += dwpt.pendingDeletes.numTermDeletes.get();
+    }
+    return total;
+  }
+  
   public boolean anyDeletions() {
     // nocommit
     return true;
@@ -369,7 +409,7 @@
             try {
               ensureOpen();
               if (delTerm != null) {
-                deleteTerm(delTerm, true);
+                deleteTermNoWait(delTerm);
               }
               perThread.commitDocument();
               numDocsInRAM.incrementAndGet();
Index: src/java/org/apache/lucene/index/IndexWriter.java
===================================================================
--- src/java/org/apache/lucene/index/IndexWriter.java	(revision 1052168)
+++ src/java/org/apache/lucene/index/IndexWriter.java	(working copy)
@@ -3209,12 +3209,12 @@
 
   // For test purposes.
   final int getBufferedDeleteTermsSize() {
-    return docWriter.getPendingDeletes().terms.size();
+    return docWriter.getBufferedDeleteTermsSize();
   }
 
   // For test purposes.
   final int getNumBufferedDeleteTerms() {
-    return docWriter.getPendingDeletes().numTermDeletes.get();
+    return docWriter.getNumBufferedDeleteTerms();
   }
 
   // utility routines for tests
