[jboss-jira] [JBoss JIRA] Commented: (JGRP-787) UNICAST over TCP with xmit_off=true: sending message in synchronized block leads to deadlocks

Bela Ban (JIRA) jira-events at lists.jboss.org
Mon Jun 16 03:44:33 EDT 2008


    [ http://jira.jboss.com/jira/browse/JGRP-787?page=comments#action_12417232 ] 
            
Bela Ban commented on JGRP-787:
-------------------------------

Removing FC also makes the problem go away

> UNICAST over TCP with xmit_off=true: sending message in synchronized block leads to deadlocks
> ---------------------------------------------------------------------------------------------
>
>                 Key: JGRP-787
>                 URL: http://jira.jboss.com/jira/browse/JGRP-787
>             Project: JGroups
>          Issue Type: Bug
>            Reporter: Bela Ban
>         Assigned To: Bela Ban
>             Fix For: 2.7, 2.6.3
>
>
> Same issue as http://jira.jboss.com/jira/browse/JGRP-303: that's why we moved the send() outside the synchronized block.
> The problem with xmit_off though is that we need to know the message was passed to TCP/IP successfully, or else we CANNOT increment the sequence number !
> Stack trace:
> Found one Java-level deadlock:
> =============================
> "Incoming-27,UnicastTest-Group,192.168.1.5:7500":
>   waiting for ownable synchronizer 0x00002aaac0921168, (a java.util.concurrent.locks.ReentrantLock$NonfairSync),
>   which is held by "Incoming-4,UnicastTest-Group,192.168.1.5:7500"
> "Incoming-4,UnicastTest-Group,192.168.1.5:7500":
>   waiting to lock monitor 0x00002aaacc8e9cf0 (object 0x00002aaac09e3a88, a org.jgroups.protocols.UNICAST$Entry),
>   which is held by "main"
> "main":
>   waiting for ownable synchronizer 0x00002aaac0921168, (a java.util.concurrent.locks.ReentrantLock$NonfairSync),
>   which is held by "Incoming-4,UnicastTest-Group,192.168.1.5:7500"
> Java stack information for the threads listed above:
> ===================================================
> "Incoming-27,UnicastTest-Group,192.168.1.5:7500":
>         at sun.misc.Unsafe.park(Native Method)
>         - parking to wait for  <0x00002aaac0921168> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
>         at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:747)
>         at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:778)
>         at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1114)
>         at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:186)
>         at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262)
>         at org.jgroups.protocols.UNICAST.handleDataReceived(UNICAST.java:635)
>         at org.jgroups.protocols.UNICAST.up(UNICAST.java:292)
>         at org.jgroups.protocols.pbcast.NAKACK.up(NAKACK.java:735)
>         at org.jgroups.protocols.BARRIER.up(BARRIER.java:136)
>         at org.jgroups.protocols.VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:167)
>         at org.jgroups.protocols.FD_SOCK.up(FD_SOCK.java:309)
>         at org.jgroups.protocols.MERGE2.up(MERGE2.java:144)
>         at org.jgroups.protocols.Discovery.up(Discovery.java:244)
>         at org.jgroups.protocols.TP.passMessageUp(TP.java:1266)
>         at org.jgroups.protocols.TP.access$100(TP.java:49)
>         at org.jgroups.protocols.TP$1.run(TP.java:1169)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
>         at java.lang.Thread.run(Thread.java:619)
> "Incoming-4,UnicastTest-Group,192.168.1.5:7500":
>         at org.jgroups.protocols.UNICAST.down(UNICAST.java:357)
>         - waiting to lock <0x00002aaac09e3a88> (a org.jgroups.protocols.UNICAST$Entry)
>         at org.jgroups.protocols.pbcast.STABLE.down(STABLE.java:316)
>         at org.jgroups.protocols.VIEW_SYNC.down(VIEW_SYNC.java:204)
>         at org.jgroups.protocols.pbcast.GMS.down(GMS.java:859)
>         at org.jgroups.protocols.FC.sendCredit(FC.java:740)
>         at org.jgroups.protocols.FC.up(FC.java:416)
>         at org.jgroups.protocols.pbcast.GMS.up(GMS.java:788)
>         at org.jgroups.protocols.VIEW_SYNC.up(VIEW_SYNC.java:192)
>         at org.jgroups.protocols.pbcast.STABLE.up(STABLE.java:233)
>         at org.jgroups.protocols.UNICAST.handleDataReceived(UNICAST.java:645)
>         at org.jgroups.protocols.UNICAST.up(UNICAST.java:292)
>         at org.jgroups.protocols.pbcast.NAKACK.up(NAKACK.java:735)
>         at org.jgroups.protocols.BARRIER.up(BARRIER.java:136)
>         at org.jgroups.protocols.VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:167)
>         at org.jgroups.protocols.FD_SOCK.up(FD_SOCK.java:309)
>         at org.jgroups.protocols.MERGE2.up(MERGE2.java:144)
>         at org.jgroups.protocols.Discovery.up(Discovery.java:244)
>         at org.jgroups.protocols.TP.passMessageUp(TP.java:1266)
>         at org.jgroups.protocols.TP.access$100(TP.java:49)
>         at org.jgroups.protocols.TP$1.run(TP.java:1169)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
>         at java.lang.Thread.run(Thread.java:619)
> "main":
>         at sun.misc.Unsafe.park(Native Method)
>         - parking to wait for  <0x00002aaac0921168> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
>         at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:747)
>         at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:778)
>         at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1114)
>         at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:186)
>         at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262)
>         at org.jgroups.protocols.UNICAST.handleDataReceived(UNICAST.java:635)
>         at org.jgroups.protocols.UNICAST.up(UNICAST.java:292)
>         at org.jgroups.protocols.pbcast.NAKACK.up(NAKACK.java:735)
>         at org.jgroups.protocols.BARRIER.up(BARRIER.java:136)
>         at org.jgroups.protocols.VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:167)
>         at org.jgroups.protocols.FD_SOCK.up(FD_SOCK.java:309)
>         at org.jgroups.protocols.MERGE2.up(MERGE2.java:144)
>         at org.jgroups.protocols.Discovery.up(Discovery.java:244)
>         at org.jgroups.protocols.TP.passMessageUp(TP.java:1266)
>         at org.jgroups.protocols.TP.access$100(TP.java:49)
>         at org.jgroups.protocols.TP$1.run(TP.java:1169)
>         at java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy.rejectedExecution(ThreadPoolExecutor.java:1737)
>         at org.jgroups.util.ShutdownRejectedExecutionHandler.rejectedExecution(ShutdownRejectedExecutionHandler.java:39)
>         at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767)
>         at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:658)
>         at org.jgroups.protocols.TP.down(TP.java:1167)
>         at org.jgroups.protocols.Discovery.down(Discovery.java:349)
>         at org.jgroups.protocols.MERGE2.down(MERGE2.java:175)
>         at org.jgroups.protocols.FD_SOCK.down(FD_SOCK.java:373)
>         at org.jgroups.protocols.VERIFY_SUSPECT.down(VERIFY_SUSPECT.java:95)
>         at org.jgroups.protocols.BARRIER.down(BARRIER.java:107)
>         at org.jgroups.protocols.pbcast.NAKACK.down(NAKACK.java:660)
>         at org.jgroups.protocols.UNICAST.send(UNICAST.java:484)
>         at org.jgroups.protocols.UNICAST.down(UNICAST.java:373)
>         - locked <0x00002aaac09e3a88> (a org.jgroups.protocols.UNICAST$Entry)
>         at org.jgroups.protocols.pbcast.STABLE.down(STABLE.java:316)
>         at org.jgroups.protocols.VIEW_SYNC.down(VIEW_SYNC.java:204)
>         at org.jgroups.protocols.pbcast.GMS.down(GMS.java:859)
>         at org.jgroups.protocols.FC.handleDownMessage(FC.java:526)
>         at org.jgroups.protocols.FC.down(FC.java:365)
>         at org.jgroups.protocols.FRAG2.down(FRAG2.java:175)
>         at org.jgroups.protocols.pbcast.STREAMING_STATE_TRANSFER.down(STREAMING_STATE_TRANSFER.java:303)
>         at org.jgroups.stack.ProtocolStack.down(ProtocolStack.java:457)
>         at org.jgroups.JChannel.down(JChannel.java:1443)
>         at org.jgroups.JChannel.send(JChannel.java:620)
>         at org.jgroups.tests.UnicastTest.sendMessages(UnicastTest.java:241)
>         at org.jgroups.tests.UnicastTest.eventLoop(UnicastTest.java:198)
>         at org.jgroups.tests.UnicastTest.main(UnicastTest.java:355)
> Found 1 deadlock.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list