[ 
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to