You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Mike Hearn (JIRA)" <ji...@apache.org> on 2016/12/20 14:30:58 UTC

[jira] [Created] (ARTEMIS-897) Shutdown race between ServerSessionImpl::TempQueueCleanerUpper and server shutdown

Mike Hearn created ARTEMIS-897:
----------------------------------

             Summary: Shutdown race between ServerSessionImpl::TempQueueCleanerUpper and server shutdown
                 Key: ARTEMIS-897
                 URL: https://issues.apache.org/jira/browse/ARTEMIS-897
             Project: ActiveMQ Artemis
          Issue Type: Bug
    Affects Versions: 1.5.0
            Reporter: Mike Hearn


If a client that created a transient queue is disconnecting in parallel with the broker shutting down, then destroyQueue() can be called whilst stop() is in progress or has already completed, resulting in a NullPointerException:

[ERROR] 14:21:08.620 [Thread-5 (activemq-netty-threads-54254849)] server.run - AMQ224048: Failed to remove temporary queue clients.test.rpc.6093900836534386099
java.lang.NullPointerException
	at org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.destroyQueue(ActiveMQServerImpl.java:1566) ~[artemis-server-1.4.0.jar:1.4.0]
	at org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.destroyQueue(ActiveMQServerImpl.java:1556) ~[artemis-server-1.4.0.jar:1.4.0]
	at org.apache.activemq.artemis.core.server.impl.ServerSessionImpl$TempQueueCleanerUpper.run(ServerSessionImpl.java:588) [artemis-server-1.4.0.jar:1.4.0]
	at org.apache.activemq.artemis.core.server.impl.ServerSessionImpl$TempQueueCleanerUpper.connectionClosed(ServerSessionImpl.java:612) [artemis-server-1.4.0.jar:1.4.0]
	at org.apache.activemq.artemis.spi.core.protocol.AbstractRemotingConnection.callClosingListeners(AbstractRemotingConnection.java:87) [artemis-core-client-1.4.0.jar:1.4.0]
	at org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.fail(RemotingConnectionImpl.java:209) [artemis-core-client-1.4.0.jar:1.4.0]
	at org.apache.activemq.artemis.spi.core.protocol.AbstractRemotingConnection.fail(AbstractRemotingConnection.java:214) [artemis-core-client-1.4.0.jar:1.4.0]
	at org.apache.activemq.artemis.core.remoting.server.impl.RemotingServiceImpl.connectionDestroyed(RemotingServiceImpl.java:541) [artemis-server-1.4.0.jar:1.4.0]
	at org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptor$Listener.connectionDestroyed(NettyAcceptor.java:696) [artemis-server-1.4.0.jar:1.4.0]
	at org.apache.activemq.artemis.core.remoting.impl.netty.ActiveMQChannelHandler.channelInactive(ActiveMQChannelHandler.java:75) [artemis-core-client-1.4.0.jar:1.4.0]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:250) [netty-all-4.0.39.Final.jar:4.0.39.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:236) [netty-all-4.0.39.Final.jar:4.0.39.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:229) [netty-all-4.0.39.Final.jar:4.0.39.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:360) [netty-all-4.0.39.Final.jar:4.0.39.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:325) [netty-all-4.0.39.Final.jar:4.0.39.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:250) [netty-all-4.0.39.Final.jar:4.0.39.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:236) [netty-all-4.0.39.Final.jar:4.0.39.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:229) [netty-all-4.0.39.Final.jar:4.0.39.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:360) [netty-all-4.0.39.Final.jar:4.0.39.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:325) [netty-all-4.0.39.Final.jar:4.0.39.Final]
	at io.netty.handler.ssl.SslHandler.channelInactive(SslHandler.java:723) [netty-all-4.0.39.Final.jar:4.0.39.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:250) [netty-all-4.0.39.Final.jar:4.0.39.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:236) [netty-all-4.0.39.Final.jar:4.0.39.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:229) [netty-all-4.0.39.Final.jar:4.0.39.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelIn

destroyQueue should probably be checking if the server is still running?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)