Are the semantics of close() really correct when reopen() is used?
public final synchronized void close() throws IOException {
if (!closed) {
decRef();
closed = true;
}
}
Solr has the following code:
IndexReader newReader = currentReader.reopen();
if (newReader == currentReader) {
currentReader.incRef();
}
reopen() used to return the same instance if no changes had been made
- that makes sense.
But then of you do a close on both the currentReader and newReader,
only one decRef() will be called!
The reopen() javadoc suggests this has not changed:
* If the index has not changed since this instance was (re)opened, then this
* call is a NOOP and returns this instance.
Seems like the "closed" variable just be eliminated completely?
Throwing an exception on too many closes (rather than silently
ignoring) would probably be doing people a favor.
-Yonik
http://www.lucidimagination.com
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]