[
https://issues.apache.org/jira/browse/AMQ-5263?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16611953#comment-16611953
]
Krzysztof Mackowiak commented on AMQ-5263:
------------------------------------------
I've added a patch with a potential fix for this bug.
> Method ActiveMQSession.close() is not thread safe as declared and required
> --------------------------------------------------------------------------
>
> Key: AMQ-5263
> URL: https://issues.apache.org/jira/browse/AMQ-5263
> Project: ActiveMQ
> Issue Type: Bug
> Components: JMS client
> Affects Versions: 5.9.1
> Environment: any operationg system, and any platform
> Reporter: Jiang Fuqiang
> Priority: Major
> Attachments:
> AMQ-5263_bugfix_for_ActiveMQSession_close()_thread-safety.patch,
> AMQ-5263_test_for_ActiveMQSession_close()_thread-safety.patch
>
>
> If ActiveMQSession.close() and ActiveMQSession.dispose() run concurrently,
> the statements in close() method might throw NullPointerException。Just marked
> by the following code snippet.
> -------------------------------
> public void ActiveMQSession.close() throws JMSException {
> if (!closed) {
> if (getTransactionContext().isInXATransaction()) { // it might
> throw NullPointerException
> ...
> -------------------------------
> In my application, I call Session.close() when I detect JMSException, but
> Session.close() throws NullPointerException occasionally。I suspect that's
> because ActiveMQConnection called ActiveMQSession.dispose() in case of
> transport error, and ActiveMQSession.dispose() nullified
> ActiveMQSession.transactionContext before ActiveMQSession.closed is assigned
> to false. Since this NullPointerException error just happened once and can
> not be reproduced, it's only a suspection.
> It seems that close() and dispose() should be synchronized, and then sessions
> can be closed safely.
> I'm not good at English, but I hope this issue is demonstrated clearly enough.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)