Index: lucene/src/java/org/apache/lucene/index/SegmentCoreReaders.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/SegmentCoreReaders.java	(revision 1220649)
+++ lucene/src/java/org/apache/lucene/index/SegmentCoreReaders.java	(working copy)
@@ -45,6 +45,7 @@
   final IndexInput freqStream;
   final IndexInput proxStream;
   final TermInfosReader tisNoIndex;
+  volatile boolean termIndexLoaded;
 
   final Directory dir;
   final Directory cfsDir;
@@ -81,13 +82,11 @@
 
       this.termsIndexDivisor = termsIndexDivisor;
       TermInfosReader reader = new TermInfosReader(cfsDir, segment, fieldInfos, readBufferSize, termsIndexDivisor);
-      if (termsIndexDivisor == -1) {
-        tisNoIndex = reader;
-      } else {
-        tis = reader;
-        tisNoIndex = null;
-      }
-
+      termIndexLoaded = termsIndexDivisor != -1;
+      tis = reader;
+      // back up the reader to close it if we load the TI later;
+      tisNoIndex = !termIndexLoaded ? reader : null;
+      
       // make sure that all index files have been read or are kept open
       // so that if an index update removes them we'll still have them
       freqStream = cfsDir.openInput(IndexFileNames.segmentFileName(segment, IndexFileNames.FREQ_EXTENSION), readBufferSize);
@@ -127,16 +126,12 @@
     return cfsReader;
   }
 
-  synchronized TermInfosReader getTermsReader() {
-    if (tis != null) {
-      return tis;
-    } else {
-      return tisNoIndex;
-    }
+  TermInfosReader getTermsReader() {
+    return tis;
   }      
 
-  synchronized boolean termsIndexIsLoaded() {
-    return tis != null;
+  boolean termsIndexIsLoaded() {
+    return termIndexLoaded;
   }      
 
   // NOTE: only called from IndexWriter when a near
@@ -145,7 +140,7 @@
   // method is not fully thread safe, and relies on the
   // synchronization in IndexWriter
   synchronized void loadTermsIndex(SegmentInfo si, int termsIndexDivisor) throws IOException {
-    if (tis == null) {
+    if (!termIndexLoaded) {
       Directory dir0;
       if (si.getUseCompoundFile()) {
         // In some cases, we were originally opened when CFS
@@ -161,6 +156,7 @@
       }
 
       tis = new TermInfosReader(dir0, segment, fieldInfos, readBufferSize, termsIndexDivisor);
+      termIndexLoaded = true;
     }
   }
 
