This came up a while back and we decided (then) that double-closing should be allowed:
http://issues.apache.org/jira/browse/LUCENE-818?focusedCommentId=12477399&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_12477399 I think if we changed this ("every close counts") we'd break a number of apps. Since close() is just a protected ("only once") call to decRef(), you could simply always call decRef() and never close()? Mike On Thu, Jun 25, 2009 at 3:09 PM, Yonik Seeley<[email protected]> wrote: > 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] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
