[
https://issues.apache.org/jira/browse/AMQCPP-388?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13230468#comment-13230468
]
Helen Huang edited comment on AMQCPP-388 at 3/15/12 8:50 PM:
-------------------------------------------------------------
I tried to add the lock that I have suggested to
ActiveMQConnection::cleanup(), repeated the test a few times, and did not get
the same crash as before. So that might have worked. However, I got another
crash in ActiveMQConnection::onException() after the cleanup() call. The error
message was: R6025 -pure virtual function call. Could you please take a look?
Thanks!
Call stack:
activemq-cppud.dll!activemq::core::ActiveMQConnection::onException(const
decaf::lang::Exception & ex={...}) Line 787 C++
> activemq-cppud.dll!activemq::transport::TransportFilter::fire(const
> decaf::lang::Exception & ex={...}) Line 58 + 0x17 bytes C++
activemq-cppud.dll!activemq::transport::TransportFilter::onException(const
decaf::lang::Exception & ex={...}) Line 51 C++
activemq-cppud.dll!activemq::transport::TransportFilter::fire(const
decaf::lang::Exception & ex={...}) Line 58 + 0x17 bytes C++
activemq-cppud.dll!activemq::transport::TransportFilter::onException(const
decaf::lang::Exception & ex={...}) Line 51 C++
activemq-cppud.dll!activemq::transport::TransportFilter::fire(const
decaf::lang::Exception & ex={...}) Line 58 + 0x17 bytes C++
activemq-cppud.dll!activemq::transport::TransportFilter::onException(const
decaf::lang::Exception & ex={...}) Line 51 C++
activemq-cppud.dll!activemq::transport::inactivity::InactivityMonitor::onException(const
decaf::lang::Exception & ex={...}) Line 314 C++
activemq-cppud.dll!activemq::transport::TransportFilter::fire(const
decaf::lang::Exception & ex={...}) Line 58 + 0x17 bytes C++
activemq-cppud.dll!activemq::transport::TransportFilter::onException(const
decaf::lang::Exception & ex={...}) Line 51 C++
activemq-cppud.dll!activemq::transport::IOTransport::fire(decaf::lang::Exception
& ex={...}) Line 72 + 0x17 bytes C++
activemq-cppud.dll!activemq::transport::IOTransport::run() Line 245
C++
activemq-cppud.dll!decaf::lang::ThreadProperties::runCallback(decaf::lang::ThreadProperties
* properties=0x012ea1d8) Line 137 + 0x13 bytes C++
activemq-cppud.dll!`anonymous namespace'::threadWorker(void *
arg=0x012ea1d8) Line 210 + 0x9 bytes C++
msvcr80d.dll!_callthreadstartex() Line 348 + 0xf bytes C
msvcr80d.dll!_threadstartex(void * ptd=0x012e9f88) Line 331 C
kernel32.dll!7c80b713()
It looks like the connection can be deposed/deleted by another thread while a
thread is in the onException() function.
was (Author: hhuang):
I tried to add the lock that I have suggested to
ActiveMQConnection::cleanup(), repeated the test a few times, and did not get
the same crash as before. So that might have worked. However, I got another
crash in ActiveMQConnection::onException() after the cleanup() call. The error
message was: R6025 -pure virtual function call. Could you please take a look?
Thanks!
Call stack:
activemq-cppud.dll!activemq::core::ActiveMQConnection::onException(const
decaf::lang::Exception & ex={...}) Line 787 C++
> activemq-cppud.dll!activemq::transport::TransportFilter::fire(const
> decaf::lang::Exception & ex={...}) Line 58 + 0x17 bytes C++
activemq-cppud.dll!activemq::transport::TransportFilter::onException(const
decaf::lang::Exception & ex={...}) Line 51 C++
activemq-cppud.dll!activemq::transport::TransportFilter::fire(const
decaf::lang::Exception & ex={...}) Line 58 + 0x17 bytes C++
activemq-cppud.dll!activemq::transport::TransportFilter::onException(const
decaf::lang::Exception & ex={...}) Line 51 C++
activemq-cppud.dll!activemq::transport::TransportFilter::fire(const
decaf::lang::Exception & ex={...}) Line 58 + 0x17 bytes C++
activemq-cppud.dll!activemq::transport::TransportFilter::onException(const
decaf::lang::Exception & ex={...}) Line 51 C++
activemq-cppud.dll!activemq::transport::inactivity::InactivityMonitor::onException(const
decaf::lang::Exception & ex={...}) Line 314 C++
activemq-cppud.dll!activemq::transport::TransportFilter::fire(const
decaf::lang::Exception & ex={...}) Line 58 + 0x17 bytes C++
activemq-cppud.dll!activemq::transport::TransportFilter::onException(const
decaf::lang::Exception & ex={...}) Line 51 C++
activemq-cppud.dll!activemq::transport::IOTransport::fire(decaf::lang::Exception
& ex={...}) Line 72 + 0x17 bytes C++
activemq-cppud.dll!activemq::transport::IOTransport::run() Line 245
C++
activemq-cppud.dll!decaf::lang::ThreadProperties::runCallback(decaf::lang::ThreadProperties
* properties=0x012ea1d8) Line 137 + 0x13 bytes C++
activemq-cppud.dll!`anonymous namespace'::threadWorker(void *
arg=0x012ea1d8) Line 210 + 0x9 bytes C++
msvcr80d.dll!_callthreadstartex() Line 348 + 0xf bytes C
msvcr80d.dll!_threadstartex(void * ptd=0x012e9f88) Line 331 C
kernel32.dll!7c80b713()
> AprPool::getAprPool() returns NULL, causing access violation and application
> crash
> ----------------------------------------------------------------------------------
>
> Key: AMQCPP-388
> URL: https://issues.apache.org/jira/browse/AMQCPP-388
> Project: ActiveMQ C++ Client
> Issue Type: Bug
> Components: Decaf
> Affects Versions: 3.2.3
> Environment: Windows xp service pack 3, ActiveMQ broker 5.3.1, apr
> 1.4.2, apr-util 1.3.9, apr iconv 1.2.1
> Reporter: Helen Huang
> Assignee: Timothy Bish
> Priority: Critical
> Fix For: 3.2.3
>
> Attachments: BrokerMonitor.zip
>
>
> Our application that uses activemq c++ client lib crashed with the following
> dump:
> ----------------------------------------------------------------------------------------------------------------------
> Thread 87 - System ID 3780
> Function Arg 1 Arg 2 Arg 3 Source
> libapr_1!apr_pvsprintf+8 00000000 0642a188 180eeb94
> activemq_cppu!decaf::lang::Exception::buildMessage+71 0642a188
> 180eeb74 180eee2c
> activemq_cppu!decaf::lang::exceptions::RuntimeException::RuntimeException+4d
> 180efeec 0642a160 00000097
> activemq_cppu!decaf::lang::ThreadProperties::runCallback+125 180eee2c
> 180efee0 00000001
> msvcr80!CatchIt+5c 00000000 00000000 00000000
> LIBAPR_1!APR_PVSPRINTF+8In scotapp.dmp the assembly instruction at
> libapr_1!apr_pvsprintf+8 in C:\scot\dll\libapr-1.dll has caused an access
> violation exception (0xC0000005) when trying to read from memory location
> 0x0000002c on thread 87
> --------------------------------------------------------------------------------------------------------------------
> On the call stack, we saw that following function from class
> decaf::lang::Exception was called:
> void Exception::buildMessage( const char* format, va_list& vargs ) {
> // Allocate buffer with a guess of it's size
> AprPool pool;
> // Allocate a buffer of the specified size.
> char* buffer = apr_pvsprintf( pool.getAprPool(), format, vargs );
> // Guessed size was enough. Assign the string.
> message.assign( buffer, strlen( buffer ) );
> }
> The first parameter passed into apr_pvsprintf was NULL, causing the crash.
> Could you please take a look and see if there is any bug in the activemqcpp
> code that could cause the problem. Thanks!
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira