You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "ryan rawson (JIRA)" <ji...@apache.org> on 2014/12/16 03:27:17 UTC

[jira] [Created] (LUCENE-6113) ReferenceManager.release uses assertion to expect argument not null, also expects argument to be not null

ryan rawson created LUCENE-6113:
-----------------------------------

             Summary: ReferenceManager.release uses assertion to expect argument not null, also expects argument to be not null
                 Key: LUCENE-6113
                 URL: https://issues.apache.org/jira/browse/LUCENE-6113
             Project: Lucene - Core
          Issue Type: Bug
    Affects Versions: 4.10.1
            Reporter: ryan rawson


A common use pattern for the Reference Manager looks like so:

{code}
IndexSearcher searcher = null;
try {
    searcher = searcherManager.acquire();
    // do real work
} finally {
   searcherManager.release(searcher);
}
{code}

The problem with this code is if 'acquire' throws an exception, the finally block is called with a null reference for 'searcher'.  There are two issues, one is this call release() uses assertion to check for argument validity, which is not recommended (http://docs.oracle.com/javase/8/docs/technotes/guides/language/assert.html) and secondly to fix this, we need to guard all calls to release with an if clause.

Why not have release() be a noop if it is passed null, instead of triggering an NPE?  It would support this API usage pattern w/o any changes on the behalf of users.

Looking at the code, it appears that it is very unlikely that the acquire() call throws an exception. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org