[
https://issues.apache.org/jira/browse/CXF-7145?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Freeman Fang updated CXF-7145:
------------------------------
Description:
The JmsPullPoint would be accessed by both the producer client and consumer
client, currently the whole store(used by producer) and getMessages(used by
consumer) method was synchronized. For some flow control scenario[1], the
{code}
producer.send(message);
{code}
in store method would be blocked if the jms queue exceed some certain size, in
this case the getMessages method never get chance to be invoked to decrease the
queue size which cause deadlock.
Actually in the methods only the session init and reset should be synchronized,
so we should synchronize the session only to avoid this deadlock
[1]http://activemq.apache.org/producer-flow-control.html
was:
The JmsPullPoint would be accessed by both the producer client and consumer
client, currently the whole store(used by producer) and getMessages(used by
consumer) method was synchronized. For some flow control scenario[1], the
{code}
producer.send(message);
{code}
in store method would be blocked if the jms queue exceed some certain size, in
this case the getMessages method never get chance to be invoked to decrease the
queue size which cause deadlock.
Actually in the methods only the session is critical resource which should be
synchronized, so we should synchronize the session only to avoid this deadlock
[1]http://activemq.apache.org/producer-flow-control.html
> synchronized store and getMessages of JmsPullPoint would cause deadlock
> -----------------------------------------------------------------------
>
> Key: CXF-7145
> URL: https://issues.apache.org/jira/browse/CXF-7145
> Project: CXF
> Issue Type: Bug
> Components: Services
> Reporter: Freeman Fang
> Assignee: Freeman Fang
>
> The JmsPullPoint would be accessed by both the producer client and consumer
> client, currently the whole store(used by producer) and getMessages(used by
> consumer) method was synchronized. For some flow control scenario[1], the
> {code}
> producer.send(message);
> {code}
> in store method would be blocked if the jms queue exceed some certain size,
> in this case the getMessages method never get chance to be invoked to
> decrease the queue size which cause deadlock.
> Actually in the methods only the session init and reset should be
> synchronized, so we should synchronize the session only to avoid this deadlock
> [1]http://activemq.apache.org/producer-flow-control.html
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)