geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kevan Miller (JIRA)" <j...@apache.org>
Subject [jira] Closed: (GERONIMO-1494) Potential infinite loop in ActiveMQ shutdown processing
Date Fri, 08 Dec 2006 05:31:21 GMT
     [ http://issues.apache.org/jira/browse/GERONIMO-1494?page=all ]

Kevan Miller closed GERONIMO-1494.
----------------------------------

    Resolution: Duplicate

No idea if this problem can still occur in AMQ 4. Pretty sure that an identical jira was raised
in AMQ, anyway...

> Potential infinite loop in ActiveMQ shutdown processing
> -------------------------------------------------------
>
>                 Key: GERONIMO-1494
>                 URL: http://issues.apache.org/jira/browse/GERONIMO-1494
>             Project: Geronimo
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: ActiveMQ
>    Affects Versions: 1.0
>            Reporter: Kevan Miller
>         Assigned To: 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

        

Mime
View raw message