[ http://issues.apache.org/jira/browse/GERONIMO-1494?page=comments#action_12371370 ]
Hiram Chirino commented on GERONIMO-1494: ----------------------------------------- see http://jira.activemq.org/jira/browse/AMQ-652 > Potential infinite loop in ActiveMQ shutdown processing > ------------------------------------------------------- > > Key: GERONIMO-1494 > URL: http://issues.apache.org/jira/browse/GERONIMO-1494 > Project: Geronimo > Type: Bug > Components: ActiveMQ > Versions: 1.0 > Reporter: Kevan Miller > Priority: Minor > Fix For: 1.2 > > The geronimo.log posted to http://issues.apache.org/jira/browse/GERONIMO-1372 > shows evidence of infinite loop in ActiveMQ shutdown processing. > The log entry from the 1372 log is excerpted below: > 17:30:34,325 WARN [TransportChannelSupport] Caught exception dispatching > message and no ExceptionListener registered: javax.jms.JMSException: > asyncSend failed: java.io.EOFException: Cannot write to the stream any more > it has already been closed > javax.jms.JMSException: asyncSend failed: java.io.EOFException: Cannot write > to the stream any more it has already been closed > at > org.activemq.util.JMSExceptionHelper.newJMSException(JMSExceptionHelper.java:49) > > at > org.activemq.transport.tcp.TcpTransportChannel.doAsyncSend(TcpTransportChannel.java:483) > > at > org.activemq.transport.TransportChannelSupport.asyncSendWithReceipt(TransportChannelSupport.java:160) > > at > org.activemq.transport.TransportChannelSupport.send(TransportChannelSupport.java:145) > > at > org.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1377) > at > org.activemq.ActiveMQConnection.sendConnectionInfoToBroker(ActiveMQConnection.java:1617) > > at org.activemq.ActiveMQConnection.close(ActiveMQConnection.java:762) > at > org.activemq.ra.ActiveMQBaseEndpointWorker.safeClose(ActiveMQBaseEndpointWorker.java:78) > > at > org.activemq.ra.ActiveMQAsfEndpointWorker.disconnect(ActiveMQAsfEndpointWorker.java:164) > > at > org.activemq.ra.ActiveMQAsfEndpointWorker.reconnect(ActiveMQAsfEndpointWorker.java:176) > > at > org.activemq.ra.ActiveMQAsfEndpointWorker.access$200(ActiveMQAsfEndpointWorker.java:40) > > at > org.activemq.ra.ActiveMQAsfEndpointWorker$1$1.onException(ActiveMQAsfEndpointWorker.java:83) > > at > org.activemq.transport.TransportChannelSupport.onAsyncException(TransportChannelSupport.java:445) > > at > org.activemq.transport.tcp.TcpTransportChannel.doAsyncSend(TcpTransportChannel.java:484) > > at > org.activemq.transport.TransportChannelSupport.asyncSendWithReceipt(TransportChannelSupport.java:160) > > at > org.activemq.transport.TransportChannelSupport.send(TransportChannelSupport.java:145) > > at > org.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1377) > at > org.activemq.ActiveMQConnection.sendConnectionInfoToBroker(ActiveMQConnection.java:1617) > > at org.activemq.ActiveMQConnection.close(ActiveMQConnection.java:762) > at > org.activemq.ra.ActiveMQBaseEndpointWorker.safeClose(ActiveMQBaseEndpointWorker.java:78) > > at > org.activemq.ra.ActiveMQAsfEndpointWorker.disconnect(ActiveMQAsfEndpointWorker.java:164) > > at > org.activemq.ra.ActiveMQAsfEndpointWorker.reconnect(ActiveMQAsfEndpointWorker.java:176) > > at > org.activemq.ra.ActiveMQAsfEndpointWorker.access$200(ActiveMQAsfEndpointWorker.java:40) > > at > org.activemq.ra.ActiveMQAsfEndpointWorker$1$1.onException(ActiveMQAsfEndpointWorker.java:83) > > at > org.activemq.transport.TransportChannelSupport.onAsyncException(TransportChannelSupport.java:445) > > at > org.activemq.transport.tcp.TcpTransportChannel.doAsyncSend(TcpTransportChannel.java:484) > > at > org.activemq.transport.TransportChannelSupport.asyncSendWithReceipt(TransportChannelSupport.java:160) > > at > org.activemq.transport.TransportChannelSupport.send(TransportChannelSupport.java:145) > > at > org.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1377) > at > org.activemq.ActiveMQConnection.sendConnectionInfoToBroker(ActiveMQConnection.java:1617) > > at org.activemq.ActiveMQConnection.close(ActiveMQConnection.java:762) > ... (you get the picture) > at org.activemq.ActiveMQConnection.close(ActiveMQConnection.java:762) > at > org.activemq.ra.ActiveMQBaseEndpointWorker.safeClose(ActiveMQBaseEndpointWorker.java:78) > > at > org.activemq.ra.ActiveMQAsfEndpointWorker.disconnect(ActiveMQAsfEndpointWorker.java:164) > > at > org.activemq.ra.ActiveMQAsfEndpointWorker.stop(ActiveMQAsfEndpointWorker.java:139) > > at > org.activemq.ra.ActiveMQResourceAdapter.endpointDeactivation(ActiveMQResourceAdapter.java:261) > > at > org.apache.geronimo.connector.ResourceAdapterWrapper.endpointDeactivation(ResourceAdapterWrapper.java:92) > > at > org.apache.geronimo.connector.ResourceAdapterWrapper$$FastClassByCGLIB$$4ab28e73.invoke(<generated>) > > at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53) > at > org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38) > > at > org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:118) > > at > org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:800) > > at org.apache.geronimo.gbean.runtime.RawInvoker.invoke(RawInvoker.java:57) > at > org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke(RawOperationInvoker.java:36) > > at > org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept(ProxyMethodInterceptor.java:96) > > at > org.apache.geronimo.connector.ResourceAdapterWrapper$$EnhancerByCGLIB$$74512a94.endpointDeactivation(<generated>) > > at > org.apache.geronimo.connector.ActivationSpecWrapper.deactivate(ActivationSpecWrapper.java:109) > > at > org.apache.geronimo.connector.ActivationSpecWrapper$$FastClassByCGLIB$$aaa078c1.invoke(<generated>) > > at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53) > at > org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38) > > at > org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:118) > > at > org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:800) > > at org.apache.geronimo.gbean.runtime.RawInvoker.invoke(RawInvoker.java:57) > at > org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke(RawOperationInvoker.java:36) > > at > org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept(ProxyMethodInterceptor.java:96) > > at > org.apache.geronimo.connector.ActivationSpecWrapper$$EnhancerByCGLIB$$7598abd2.deactivate(<generated>) > > at org.openejb.mdb.MDBContainer.doStop(MDBContainer.java:223) > at > org.apache.geronimo.gbean.runtime.GBeanInstance.destroyInstance(GBeanInstance.java:1079) > > at > org.apache.geronimo.gbean.runtime.GBeanInstanceState.attemptFullStop(GBeanInstanceState.java:395) > > at > org.apache.geronimo.gbean.runtime.GBeanInstanceState.stop(GBeanInstanceState.java:200) > > at > org.apache.geronimo.gbean.runtime.GBeanInstance.stop(GBeanInstance.java:545) > at > org.apache.geronimo.kernel.basic.BasicKernel.stopGBean(BasicKernel.java:213) > at > org.apache.geronimo.gbean.runtime.GBeanInstanceState.stop(GBeanInstanceState.java:192) > > at > org.apache.geronimo.gbean.runtime.GBeanInstance.stop(GBeanInstance.java:545) > at > org.apache.geronimo.kernel.basic.BasicKernel.stopGBean(BasicKernel.java:213) > at > org.apache.geronimo.gbean.runtime.GBeanInstanceState.stop(GBeanInstanceState.java:192) > > at > org.apache.geronimo.gbean.runtime.GBeanInstance.stop(GBeanInstance.java:545) > at > org.apache.geronimo.kernel.basic.BasicKernel.stopGBean(BasicKernel.java:213) > at > org.apache.geronimo.gbean.runtime.GBeanInstanceState.stop(GBeanInstanceState.java:192) > > at > org.apache.geronimo.gbean.runtime.GBeanInstance.stop(GBeanInstance.java:545) > at > org.apache.geronimo.kernel.basic.BasicKernel.stopGBean(BasicKernel.java:213) > at > org.apache.geronimo.kernel.config.ConfigurationManagerImpl$ShutdownHook.run(ConfigurationManagerImpl.java:287) > > at > org.apache.geronimo.kernel.basic.BasicKernel.notifyShutdownHooks(BasicKernel.java:406) > > at > org.apache.geronimo.kernel.basic.BasicKernel.shutdown(BasicKernel.java:383) > at org.apache.geronimo.system.main.Daemon$1.run(Daemon.java:272) > Caused by: java.io.EOFException: Cannot write to the stream any more it has > already been closed > at > org.activemq.transport.tcp.TcpBufferedOutputStream.checkClosed(TcpBufferedOutputStream.java:132) > > at > org.activemq.transport.tcp.TcpBufferedOutputStream.write(TcpBufferedOutputStream.java:70) > > at java.io.DataOutputStream.writeByte(DataOutputStream.java:131) > at > org.activemq.io.impl.DefaultWireFormat.writePacket(DefaultWireFormat.java:112) > > at > org.activemq.transport.tcp.TcpTransportChannel.doAsyncSend(TcpTransportChannel.java:474) > > ... 864 more > I haven't looked at svn history (or older src versions), but I see evidence > of changes in ActiveMQ close processing in TcpTransportChannel (i.e. code > that's been commented out). > You could break the loop at many different levels. Personally, I'd probably > add a "pendingClose" boolean to ActiveMQConnection, and test/set it in > ActiveMQConnection.close() to prevent the recursion... You might have your > own preference... -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira