[ https://issues.apache.org/activemq/browse/AMQCPP-59?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_38035 ]
Albert Strasheim commented on AMQCPP-59: ---------------------------------------- I think you might be right. I varied the receive timeout and restarted the broker at random and saw the C++ client get socket errors in various places, but I wasn't able to reproduce the uncaught exception. I think we can resolve this issue for now. > Exception is thrown when destroying consumer after connection failure > --------------------------------------------------------------------- > > Key: AMQCPP-59 > URL: https://issues.apache.org/activemq/browse/AMQCPP-59 > Project: ActiveMQ C++ Client > Issue Type: Bug > Affects Versions: 2.0 > Reporter: Albert Strasheim > Assigned To: Nathan Mittler > Fix For: 2.0 > > > Brought over from AMQCPP-46. > In a program that reconnects when it detects a connection failure using an > exception listener, there seem to be two different places where exceptions > can originate. > In most cases when I shut down the broker and the exception listener fires > properly and I can clean up everything (without deletes throwing exceptions), > the stack trace that gets printed on the console looks like this: > {noformat} > WARNING: activemq::io::SocketInputStream::read - The connection is broken > FILE: ..\src\main\activemq\network\SocketInputStream.cpp, LINE: 137 > FILE: ..\src\main\activemq\io\BufferedInputStream.cpp, LINE: 199 > FILE: ..\src\main\activemq\io\BufferedInputStream.cpp, LINE: 83 > FILE: ..\src\main\activemq\connector\stomp\StompCommandReader.cpp, > LINE: 216 > FILE: ..\src\main\activemq\connector\stomp\StompCommandReader.cpp, > LINE: 120 > FILE: ..\src\main\activemq\connector\stomp\StompCommandReader.cpp, > LINE: 71 > FILE: ..\src\main\activemq\transport\IOTransport.cpp, LINE: 175 > {noformat} > The message is printed twice with different tids, from the two threads that > are active. > Sometimes when I shut down the broker and the exception handler fires and I > clean up everything but then the consumer's destructor throws an exception. > In that case, the stack trace that is printed looks like this: > {noformat} > WARNING: activemq::io::SocketInputStream::read - An existing connection was > forcibly closed by the remote host. > FILE: ..\src\main\activemq\network\SocketInputStream.cpp, LINE: 145 > FILE: ..\src\main\activemq\io\BufferedInputStream.cpp, LINE: 199 > FILE: ..\src\main\activemq\io\BufferedInputStream.cpp, LINE: 83 > FILE: ..\src\main\activemq\connector\stomp\StompCommandReader.cpp, > LINE: 216 > FILE: ..\src\main\activemq\connector\stomp\StompCommandReader.cpp, > LINE: 120 > FILE: ..\src\main\activemq\connector\stomp\StompCommandReader.cpp, > LINE: 71 > FILE: ..\src\main\activemq\transport\IOTransport.cpp, LINE: 175 > {noformat} > Again I see this message from both threads. Note the slightly different line > numbers in SocketInputStream.cpp and the slighty different error message > (this is on Windows XP SP2). In this case the failure of the socket is > probably being detected in a slightly different place. > If the socket failure happens in the second way, it seems that destructors of > consumers (and possibly producers and sessions) don't properly catch the > exception when being destroying, causing their destructors to throw an > exception, which isn't what we want. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.