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: [email protected]
For additional commands, e-mail: [email protected]