You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Keith Wall (JIRA)" <ji...@apache.org> on 2017/06/26 16:17:00 UTC

[jira] [Comment Edited] (QPID-7835) dead lock error

    [ https://issues.apache.org/jira/browse/QPID-7835?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16063330#comment-16063330 ] 

Keith Wall edited comment on QPID-7835 at 6/26/17 4:16 PM:
-----------------------------------------------------------

Hello hanfeng

Thanks for reporting.  Can you gather a threaddump from the JVM when the deadlock occurs?  You can do this on the command line with {{jstack -l <pid>}} (jstack is found in the /bin directory beneath {{JAVA_HOME}}).  Do you have reliable way to reproduce the problem so I may cause it myself?




was (Author: k-wall):
Hello hanfeng

Thanks for reporting.  Can you gather a threaddump from the JVM when the deadlock occurs?  {{${JAVA_HOME}/bin/jstack -l <pid>}}.  Do you have reliable way to reproduce the problem so I may cause it myself?



> dead lock error
> ---------------
>
>                 Key: QPID-7835
>                 URL: https://issues.apache.org/jira/browse/QPID-7835
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Client
>    Affects Versions: qpid-java-6.1.3
>            Reporter: hanfeng
>
> When the message server links over time, a message is sent, the caller to perceive the message send timeout, take the initiative to close the session, at the same time links are perceived to request timeout to shut down connection, re link the message server.
> When the link function of doClose to get off the lock _failoverMutex, but did not get a specific lock _messageDeliveryLock to close the session, close the session function close to get to the _messageDeliveryLock _failoverMutex lock, lock wait for link
> Deadlock.
> Modification method.
> In session's close function, add a judgment that you are closing session.
>   public void close(long timeout) throws JMSException
>     	{
>     	{color:red}	if (super.isClosing()) return ;{color}
>         setClosing(true);
>         lockMessageDelivery();
>         try
>         {
>             // We must close down all producers and consumers in an orderly fashion. This is the only method
>             // that can be called from a different thread of control from the one controlling the session.
>             synchronized (getFailoverMutex())
>             {
>                 close(timeout, true);
>             }
>         }
>         finally
>         {
>             unlockMessageDelivery();
>         }
>     }



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org