[ openjms-Bugs-777419 ] Deadlock in the tcp connector

"SourceForge.net" <[email protected]>
Newsgroups gmane.comp.java.openjms.devel
Message-ID <[email protected]>
Bugs item #777419, was opened at 2003-07-25 18:42
Message generated for change (Comment added) made by tanderson
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=474136&aid=777419&group_id=54559

Category: transport
Group: v0.7.6
>Status: Closed
>Resolution: Fixed
Priority: 5
Submitted By: Tim Anderson (tanderson)
Assigned to: Tim Anderson (tanderson)
Summary: Deadlock in the tcp connector

Initial Comment:
The JMS CTS stress test SendReceive2Size0KTest 
periodically hangs when using the tcp connector and 
synchronous consumers.

It uses one producer and 2 consumers concurrently, all 
using the same Connection instance.

The problem occurs when when the producer sends a 
message to the server, both of the consumers start to 
invoke receive(), and the server tries to notify the 
consumers that messages are available.

-------------------------------------
Relevant stack trace for the client:

"Thread-21" prio=5 tid=0x272F5A08 nid=0x524 
waiting for monitor entry [27e3f000..27e3fd88]
	at 
org.exolab.jms.client.mipc.IpcJmsSessionStub.receiveMe
ssage(IpcJmsSessionStub.java:245)
	- waiting to lock <05212290> (a 
org.exolab.core.mipc.ObjectChannel)
	at 
org.exolab.jms.client.JmsSession.retrieveMessage
(JmsSession.java:853)
	- locked <052A86F8> (a java.lang.Object)
	at 
org.exolab.jms.client.JmsMessageConsumer.retrieveMess
age(JmsMessageConsumer.java:345)
	at 
org.exolab.jms.client.JmsMessageConsumer.receive
(JmsMessageConsumer.java:242)
	at 
org.exolab.jmscts.core.SynchronousReceiver.receive
(SynchronousReceiver.java:158)
	at 
org.exolab.jmscts.core.ThreadedReceiver.runProtected
(ThreadedReceiver.java:101)
	at org.exolab.jmscts.core.ThreadedAction.run
(ThreadedAction.java:110)

"Thread-20" prio=5 tid=0x2732BB00 nid=0x5d0 
waiting for monitor entry [27dff000..27dffd88]
	at 
org.exolab.jms.client.mipc.IpcJmsSessionStub.receiveMe
ssage(IpcJmsSessionStub.java:245)
	- waiting to lock <05212290> (a 
org.exolab.core.mipc.ObjectChannel)
	at 
org.exolab.jms.client.JmsSession.retrieveMessage
(JmsSession.java:853)
	- locked <052A8850> (a java.lang.Object)
	at 
org.exolab.jms.client.JmsMessageConsumer.retrieveMess
age(JmsMessageConsumer.java:345)
	at 
org.exolab.jms.client.JmsMessageConsumer.receive
(JmsMessageConsumer.java:242)
	at 
org.exolab.jmscts.core.SynchronousReceiver.receive
(SynchronousReceiver.java:158)
	at 
org.exolab.jmscts.core.ThreadedReceiver.runProtected
(ThreadedReceiver.java:101)
	at org.exolab.jmscts.core.ThreadedAction.run
(ThreadedAction.java:110)

"Thread-2" prio=5 tid=0x2735E910 nid=0xe94 waiting 
for monitor entry [27caf000..27cafd88]
	at 
org.exolab.jms.client.JmsSession.notifyConsumers
(JmsSession.java:993)
	- waiting to lock <052A86F8> (a 
java.lang.Object)
	at 
org.exolab.jms.client.JmsSession.onMessageAvailable
(JmsSession.java:590)
	at 
org.exolab.jms.client.mipc.IpcJmsMessageListener.onMe
ssageAvailable(Unknown Source)
	at 
org.exolab.jms.client.mipc.IpcJmsMessageListener.run
(Unknown Source)
	at java.lang.Thread.run(Thread.java:536)

"main" prio=5 tid=0x00235BD8 nid=0x688 in 
Object.wait() [6e000..6fc3c]
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:426)
	at org.exolab.core.mipc.Queue.remove
(Queue.java:93)
	- locked <05213568> (a java.util.LinkedList)
	at 
org.exolab.core.mipc.QueueInputStream.receive
(QueueInputStream.java:93)
	at org.exolab.core.mipc.ObjectChannel.receive
(ObjectChannel.java:141)
	at 
org.exolab.jms.client.mipc.IpcJmsSessionStub.checkRep
ly(IpcJmsSessionStub.java:865)
	at 
org.exolab.jms.client.mipc.IpcJmsSessionStub.sendMess
age(IpcJmsSessionStub.java:219)
	- locked <05212290> (a 
org.exolab.core.mipc.ObjectChannel)
	at 
org.exolab.jms.client.JmsSession.sendMessage
(JmsSession.java:679)
	- locked <05210B00> (a 
org.exolab.jms.client.JmsQueueSession)
	at 
org.exolab.jms.client.JmsMessageProducer.sendMessage
(JmsMessageProducer.java:254)
	at org.exolab.jms.client.JmsQueueSender.send
(JmsQueueSender.java:156)
	at org.exolab.jms.client.JmsQueueSender.send
(JmsQueueSender.java:113)

----------------------------
Stack trace for the server:

"EventManager-Worker-1" daemon prio=5 
tid=0x24bc8ae0 nid=0x658 waiting on monitor 
[0x2660f000..0x2660fdbc]
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:420)
	at org.exolab.core.mipc.Queue.remove
(Queue.java:93)
	at 
org.exolab.core.mipc.QueueInputStream.receive
(QueueInputStream.java:93)
	at org.exolab.core.mipc.ObjectChannel.receive
(ObjectChannel.java:141)
	at 
org.exolab.jms.server.mipc.IpcJmsSessionSender.onMes
sage(IpcJmsSessionSender.java:115)
	at 
org.exolab.jms.server.JmsServerSession.isClientEndpoin
tActive(JmsServerSession.java:1000)
	at 
org.exolab.jms.server.JmsServerConnection.isClientEndp
ointActive(JmsServerConnection.java:276)
	at 
org.exolab.jms.server.JmsServerConnectionManager.han
dleEvent(JmsServerConnectionManager.java:243)
	at 
org.exolab.jms.events.BasicEventManager$QueueEntry.r
un(BasicEventManager.java:392)
	at 
org.exolab.core.threadPool.ThreadPoolWorker.runIt
(ThreadPoolWorker.java:191)
	at 
org.exolab.core.threadPool.ThreadPoolWorker.runWork
(ThreadPoolWorker.java:178)
	at 
org.exolab.core.threadPool.ThreadPoolWorker.access$00
0(ThreadPoolWorker.java:67)
	at 
org.exolab.core.threadPool.ThreadPoolWorker$1.run
(ThreadPoolWorker.java:122)
	at java.lang.Thread.run(Thread.java:484)

"server-0" prio=5 tid=0x24d32ec0 nid=0x5e4 waiting 
on monitor [0x2632f000..0x2632fdbc]
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:420)
	at org.exolab.core.mipc.Queue.remove
(Queue.java:93)
	at 
org.exolab.core.mipc.QueueInputStream.receive
(QueueInputStream.java:93)
	at org.exolab.core.mipc.ObjectChannel.receive
(ObjectChannel.java:141)
	at 
org.exolab.jms.server.mipc.IpcJmsSessionSender.onMes
sageAvailable(IpcJmsSessionSender.java:166)
	at 
org.exolab.jms.server.JmsServerSession.onMessageAvail
able(JmsServerSession.java:986)
	at 
org.exolab.jms.messagemgr.ConsumerEndpoint.notifyMe
ssageAvailable(ConsumerEndpoint.java:790)
	at 
org.exolab.jms.messagemgr.QueueConsumerEndpoint.p
ersistentMessageAdded
(QueueConsumerEndpoint.java:302)
	at 
org.exolab.jms.messagemgr.QueueDestinationCache.per
sistentMessageAdded(QueueDestinationCache.java:388)
	at 
org.exolab.jms.messagemgr.MessageMgr.notifyOnAddPe
rsistentMessage(MessageMgr.java:786)
	at 
org.exolab.jms.messagemgr.MessageMgr.addPersistentM
essage(MessageMgr.java:416)
	at 
org.exolab.jms.messagemgr.MessageMgr.add
(MessageMgr.java:310)
	at 
org.exolab.jms.server.JmsServerSession.sendMessage
(JmsServerSession.java:364)
	at 
org.exolab.jms.server.mipc.IpcJmsSessionConnection.se
ndMessage(IpcJmsSessionConnection.java:320)
	at 
org.exolab.jms.server.mipc.IpcJmsSessionConnection.no
tify(IpcJmsSessionConnection.java:129)
	at 
org.exolab.jms.server.mipc.IpcJmsReceiver.notify
(IpcJmsReceiver.java:101)
	at 
org.exolab.jms.server.mipc.IpcServerChannel.run
(IpcServerChannel.java:143)




----------------------------------------------------------------------

>Comment By: Tim Anderson (tanderson)
Date: 2003-07-27 11:14

Message:
Logged In: YES 
user_id=557161

Fixed in CVS. IpcJmsSessionSender now schedules 
notification of messages available, rather than notifying the 
client immediately. This prevents a deadlock on the IPC 
message stream.
Will be available in the 0.7.6 release.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=474136&aid=777419&group_id=54559
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.