Client always displays exception on Windows
-------------------------------------------

                 Key: QPID-1547
                 URL: https://issues.apache.org/jira/browse/QPID-1547
             Project: Qpid
          Issue Type: Bug
          Components: Java Client
    Affects Versions: M4
            Reporter: Arnaud Simon


A java client running on Windows always displays the following exception when 
closing a JMS connection:
org.apache.qpid.AMQException: socket closed
        at 
org.apache.qpid.client.AMQConnectionDelegate_0_10.closeConnection(AMQConnectionDelegate_0_10.java:188)
        at org.apache.qpid.client.AMQConnection.doClose(AMQConnection.java:926)
        at org.apache.qpid.client.AMQConnection.doClose(AMQConnection.java:893)
        at org.apache.qpid.client.AMQConnection.close(AMQConnection.java:880)
        at org.apache.qpid.client.AMQConnection.close(AMQConnection.java:873)
        at org.apache.qpid.client.AMQConnection.close(AMQConnection.java:868)
        at 
org.apache.qpid.example.jmsexample.direct.Producer.runTest(Producer.java:126)
        at 
org.apache.qpid.example.jmsexample.direct.Producer.main(Producer.java:63)
        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:597)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
Caused by: org.apache.qpid.transport.ConnectionException: socket closed
        at org.apache.qpid.transport.Connection.close(Connection.java:487)
        at org.apache.qpid.transport.Connection.close(Connection.java:458)
        at 
org.apache.qpid.client.AMQConnectionDelegate_0_10.closeConnection(AMQConnectionDelegate_0_10.java:184)
        ... 12 more
Caused by: org.apache.qpid.transport.ConnectionException: socket closed
        at org.apache.qpid.transport.Connection.exception(Connection.java:398)
        at 
org.apache.qpid.transport.network.Assembler.exception(Assembler.java:108)
        at 
org.apache.qpid.transport.network.InputHandler.exception(InputHandler.java:196)
        at 
org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:136)
Caused by: java.net.SocketException: socket closed
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at 
org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:111)
Producer: Caught an Exception: javax.jms.JMSException: Error closing 
connection: org.apache.qpid.AMQException: socket closed
javax.jms.JMSException: Error closing connection: org.apache.qpid.AMQException: 
socket closed
        at org.apache.qpid.client.AMQConnection.doClose(AMQConnection.java:942)
        at org.apache.qpid.client.AMQConnection.doClose(AMQConnection.java:893)
        at org.apache.qpid.client.AMQConnection.close(AMQConnection.java:880)
        at org.apache.qpid.client.AMQConnection.close(AMQConnection.java:873)
        at org.apache.qpid.client.AMQConnection.close(AMQConnection.java:868)
        at 
org.apache.qpid.example.jmsexample.direct.Producer.runTest(Producer.java:126)
        at 
org.apache.qpid.example.jmsexample.direct.Producer.main(Producer.java:63)
        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:597)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
 
This exception is displayed on windows because the socket is closed (see 
qpid-1251 for more details). I would suggest the following fix:

add the following catch clause to method run() of class 
org.apache.qpid.transport.network.io.IoReceiver
      catch (SocketException se)
            {
                if( ! (se.getMessage().equalsIgnoreCase("socket closed") && 
closed.get()))
                {
                    receiver.exception(se);
                }
            }

This would swallow socket closed exception when the connection has previously 
been closed 


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to