Index: lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
===================================================================
--- lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java	(revision 1527981)
+++ lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java	(working copy)
@@ -8,6 +8,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.lucene.analysis.MockAnalyzer;
+import org.apache.lucene.analysis.MockTokenizer;
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.codecs.DocValuesFormat;
 import org.apache.lucene.codecs.asserting.AssertingDocValuesFormat;
@@ -64,6 +65,29 @@
   }
   
   @Test
+  public void testUpdatesAreFlushed() throws IOException {
+    Directory dir = newDirectory();
+    IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(
+        TEST_VERSION_CURRENT, new MockAnalyzer(random(), MockTokenizer.WHITESPACE, false)).setRAMBufferSizeMB(0.00000001));
+    writer.addDocument(doc(0)); // val=1
+    writer.addDocument(doc(1)); // val=2
+    writer.addDocument(doc(3)); // val=2
+    writer.commit();
+    assertEquals(1, writer.getFlushDeletesCount());
+    writer.updateNumericDocValue(new Term("id", "doc-0"), "val", 5L);
+    assertEquals(2, writer.getFlushDeletesCount());
+    writer.updateNumericDocValue(new Term("id", "doc-1"), "val", 6L);
+    assertEquals(3, writer.getFlushDeletesCount());
+    writer.updateNumericDocValue(new Term("id", "doc-2"), "val", 7L); 
+    assertEquals(4, writer.getFlushDeletesCount());
+    writer.getConfig().setRAMBufferSizeMB(1000d);
+    writer.updateNumericDocValue(new Term("id", "doc-2"), "val", 7L);
+    assertEquals(4, writer.getFlushDeletesCount());
+    writer.close();
+    dir.close();
+  }
+  
+  @Test
   public void testSimple() throws Exception {
     Directory dir = newDirectory();
     IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()));
Index: lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java	(revision 1527981)
+++ lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java	(working copy)
@@ -158,13 +158,11 @@
     return applyAllDeletes( deleteQueue);
   }
 
-  synchronized void updateNumericDocValue(Term term, String field, Long value) throws IOException {
+  synchronized boolean updateNumericDocValue(Term term, String field, Long value) throws IOException {
     final DocumentsWriterDeleteQueue deleteQueue = this.deleteQueue;
     deleteQueue.addNumericUpdate(new NumericUpdate(term, field, value));
     flushControl.doOnDelete();
-    if (flushControl.doApplyAllDeletes()) {
-      applyAllDeletes(deleteQueue);
-    }
+    return applyAllDeletes(deleteQueue);
   }
 
   DocumentsWriterDeleteQueue currentDeleteSession() {
Index: lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/index/IndexWriter.java	(revision 1527981)
+++ lucene/core/src/java/org/apache/lucene/index/IndexWriter.java	(working copy)
@@ -1550,7 +1550,9 @@
       throw new IllegalArgumentException("can only update existing numeric-docvalues fields!");
     }
     try {
-      docWriter.updateNumericDocValue(term, field, value);
+      if (docWriter.updateNumericDocValue(term, field, value)) {
+        processEvents(true, false);
+      }
     } catch (OutOfMemoryError oom) {
       handleOOM(oom, "updateNumericDocValue");
     }
