[jboss-jira] [JBoss JIRA] Commented: (JBMESSAGING-1847) JBoss shutdown hangs to be caused by deadlock between "JBoss Shutdown Hook" and "WorkerThread"

Yong Hao Gao (JIRA) jira-events at lists.jboss.org
Thu May 5 00:02:19 EDT 2011


    [ https://issues.jboss.org/browse/JBMESSAGING-1847?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12599973#comment-12599973 ] 

Yong Hao Gao commented on JBMESSAGING-1847:
-------------------------------------------

The reason is that ServerPeer.stopService() is a synchronized call and inside it acquires a lock in JMSServerInvocationHandler.setClose(). In the mean time the constructor of ServerSessionEndpoint makes calls to some of the ServerPeer's synchronized methods. If a session creation request comes in during shut down time, the request gets the JMSServerInvocationHandler's lock first and then goes for ServerPeer's lock. If at that time the stopService() already holds the SP's lock but waiting for the JMSServerInvocationHandler's lock, the dead lock happens.

Moving the JMSServerInvocationHandler.setClose() outside the synchronized block can solve this issue.


> JBoss shutdown hangs to be caused by deadlock between "JBoss Shutdown Hook" and "WorkerThread"
> ----------------------------------------------------------------------------------------------
>
>                 Key: JBMESSAGING-1847
>                 URL: https://issues.jboss.org/browse/JBMESSAGING-1847
>             Project: JBoss Messaging
>          Issue Type: Bug
>    Affects Versions: 1.4.0.SP3_CP03
>            Reporter: Masafumi Miura
>             Fix For: 1.4.0.SP3.CP13
>
>
> JBoss shutdown hangs to be caused by deadlock between "JBoss Shutdown Hook" and JBoss Messaging "WorkerThread"
> "JBoss Shutdown Hook" daemon prio=1 tid=0x0a023258 nid=0x2a38 in Object.wait() [0x826f8000..0x826fa130]
> 	at java.lang.Object.wait(Native Method)
> 	- waiting on <0x91593088> (a EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$WriterLock)
> 	at java.lang.Object.wait(Object.java:474)
> 	at EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$WriterLock.acquire(WriterPreferenceReadWriteLock.java:240)
> 	- locked <0x91593088> (a EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$WriterLock)
> 	at org.jboss.jms.server.remoting.JMSServerInvocationHandler.setClosed(JMSServerInvocationHandler.java:68)
> 	at org.jboss.jms.server.ServerPeer.stopService(ServerPeer.java:349)
> 	- locked <0x914cd0a0> (a org.jboss.jms.server.ServerPeer)
> 	at org.jboss.system.ServiceMBeanSupport.jbossInternalStop(ServiceMBeanSupport.java:315)
> 	at org.jboss.system.ServiceMBeanSupport.stop(ServiceMBeanSupport.java:206)
> 	at sun.reflect.GeneratedMethodAccessor96.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:585)
> 	at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
> 	at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
> 	at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
> 	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
> 	at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
> 	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
> 	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
> 	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
> 	at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:995)
> 	at $Proxy0.stop(Unknown Source)
> 	at org.jboss.system.ServiceController.stop(ServiceController.java:508)
> 	at org.jboss.system.ServiceController.stop(ServiceController.java:499)
> 	at org.jboss.system.ServiceController.stop(ServiceController.java:499)
> 	at org.jboss.system.ServiceController.stop(ServiceController.java:499)
> 	at org.jboss.system.ServiceController.stop(ServiceController.java:499)
> 	at org.jboss.system.ServiceController.stop(ServiceController.java:499)
> 	at org.jboss.system.ServiceController.stop(ServiceController.java:499)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:585)
> 	at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
> 	at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
> 	at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
> 	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
> 	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
> 	at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
> 	at $Proxy4.stop(Unknown Source)
> 	at org.jboss.deployment.SARDeployer.stop(SARDeployer.java:336)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:585)
> 	at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
> 	at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
> 	at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
> 	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
> 	at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
> 	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
> 	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
> 	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
> 	at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
> 	at $Proxy42.stop(Unknown Source)
> 	at org.jboss.deployment.XSLSubDeployer.stop(XSLSubDeployer.java:202)
> 	at org.jboss.deployment.MainDeployer.stop(MainDeployer.java:667)
> 	at org.jboss.deployment.MainDeployer.undeploy(MainDeployer.java:638)
> 	at org.jboss.deployment.MainDeployer.shutdown(MainDeployer.java:516)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:585)
> 	at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
> 	at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
> 	at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
> 	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
> 	at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
> 	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
> 	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
> 	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
> 	at org.jboss.system.server.ServerImpl$ShutdownHook.shutdownDeployments(ServerImpl.java:1058)
> 	at org.jboss.system.server.ServerImpl$ShutdownHook.shutdown(ServerImpl.java:1033)
> 	at org.jboss.system.server.ServerImpl$ShutdownHook.run(ServerImpl.java:996)
> "WorkerThread#12[10.133.46.128:50365]" prio=1 tid=0x0badb610 nid=0x1077 waiting for monitor entry [0x85657000..0x85657eb0]
> 	at org.jboss.jms.server.ServerPeer.getDefaultDLQInstance(ServerPeer.java:1187)
> 	- waiting to lock <0x914cd0a0> (a org.jboss.jms.server.ServerPeer)
> 	at org.jboss.jms.server.endpoint.ServerSessionEndpoint.<init>(ServerSessionEndpoint.java:220)
> 	at org.jboss.jms.server.endpoint.ServerConnectionEndpoint.createSessionDelegate(ServerConnectionEndpoint.java:249)
> 	at org.jboss.jms.server.endpoint.advised.ConnectionAdvised.org$jboss$jms$server$endpoint$advised$ConnectionAdvised$createSessionDelegate$aop(ConnectionAdvised.java:75)
> 	at org.jboss.jms.server.endpoint.advised.ConnectionAdvised$createSessionDelegate_6052335267724906805.invokeNext(ConnectionAdvised$createSessionDelegate_6052335267724906805.java)
> 	at org.jboss.jms.server.container.ServerLogInterceptor.invoke(ServerLogInterceptor.java:105)
> 	at org.jboss.jms.server.endpoint.advised.ConnectionAdvised$createSessionDelegate_6052335267724906805.invokeNext(ConnectionAdvised$createSessionDelegate_6052335267724906805.java)
> 	at org.jboss.jms.server.endpoint.advised.ConnectionAdvised.createSessionDelegate(ConnectionAdvised.java)
> 	at org.jboss.jms.wireformat.ConnectionCreateSessionDelegateRequest.serverInvoke(ConnectionCreateSessionDelegateRequest.java:87)
> 	at org.jboss.jms.server.remoting.JMSServerInvocationHandler.invoke(JMSServerInvocationHandler.java:143)
> 	at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:866)
> 	at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:608)
> 	at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:420)
> 	at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:173)

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the jboss-jira mailing list