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]

Reply via email to