Hello,

AFAICS from invalidatSharedReader() in AbstractReader the wrong method is 
called. Currently it is:

sharedReader.close();

This means, that since SharedIndexReader does not overload the 
FilterIndexReader.close() method, the close() method from 
org.apache.lucene.index.IndexReader is called, closing the reader. But if I am 
correct there may be clients stored in the IdentityHashMap still working with 
this reader? 

Therefore probably, the (unused) sharedReader.doClose() method in sharedReader 
is the one that should be called from AbstractIndex.invalidateSharedReader(), 
right? 

If I am correct, ATM possible methods on a closed reader can be done [1]

Regards Ard

[1] 
http://lucene.zones.apache.org:8080/hudson/job/Lucene-Nightly/javadoc/org/apache/lucene/index/IndexReader.html#close()

code parts:

AbstractIndex:

protected synchronized void invalidateSharedReader() throws IOException {
        // invalidate shared reader
        if (sharedReader != null) {
            sharedReader.close();
            sharedReader = null;
        }
    }


SharedIndexReader:

protected synchronized void doClose() throws IOException {
        if (clients.isEmpty()) {
            super.doClose();
        } else {
            closeRequested = true;
        }
    }

-- 

Hippo
Oosteinde 11
1017WT Amsterdam
The Netherlands
Tel  +31 (0)20 5224466
-------------------------------------------------------------
[EMAIL PROTECTED] / [EMAIL PROTECTED] / http://www.hippo.nl
-------------------------------------------------------------- 

Reply via email to