You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Ben Watrous (JIRA)" <ji...@apache.org> on 2009/07/28 19:28:33 UTC

[jira] Updated: (AMQCPP-257) Segfault on session or connection cleanup

     [ https://issues.apache.org/activemq/browse/AMQCPP-257?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ben Watrous updated AMQCPP-257:
-------------------------------

    Attachment: main.cpp

Attached modified example

> Segfault on session or connection cleanup
> -----------------------------------------
>
>                 Key: AMQCPP-257
>                 URL: https://issues.apache.org/activemq/browse/AMQCPP-257
>             Project: ActiveMQ C++ Client
>          Issue Type: Bug
>          Components: CMS Impl, Openwire
>    Affects Versions: 3.0.1
>         Environment: Windows Visual Studio 2005
>            Reporter: Ben Watrous
>            Assignee: Timothy Bish
>         Attachments: main.cpp
>
>
> I recently moved up to ActiveMQ CPP 3.0 (and now 3.0.1) from 2.2 to take advantage of the failover transport, and discovered a segfault during testing.  It may be related to my test procedure, but I have found a quick patch to activemq/core/ActiveMQSession.cpp that seems to resolve the issue.
> It appears that in some cases of connection loss, the connection->disposeOf() call may throw.  In which case the Session is left in an invalid state - the producers or consumer that caused the exception is still in the list, but it has already been destroyed.  This leads to an invalid pointer access later on.
> In the current test, the exception is thrown because the connection to the broker has been dropped so disposeOf fails.
> Test Procedure:
> Open the attached example (modified version of the basic sample) in the Visual Studio debugger.
> Set a breakpoint at the "producer->send( message );" line.
> Run to breakpoint.
> To simulate a broken connection, connect to broker via JMX console and execute the JMX "Stop" operation on the Connector for the producer. 
> Continue the debugger.
> ( Note: I "Purge" the TEST.FOO queue between runs since messages may sometimes be left in queue during this type of testing. )
> Suggested Patch to ActiveMQSession.cpp:
> 153a154
> >       try {
> 155a157,159
> >       }
> >       /* Absorb */
> >       AMQ_CATCHALL_NOTHROW()
> 1042a1047
> >             this->consumers.remove( id );
> 1045c1050
> <                 this->consumers.remove( id );
> ---
> >             //                this->consumers.remove( id );
> 1065a1071
> >             this->producers.remove( id );
> 1068c1074
> <                 this->producers.remove( id );
> ---
> >             //                this->producers.remove( id );

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