[ 
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.

Reply via email to