activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Helen Huang (Issue Comment Edited) (JIRA)" <j...@apache.org>
Subject [jira] [Issue Comment Edited] (AMQCPP-388) AprPool::getAprPool() returns NULL, causing access violation and application crash
Date Thu, 15 Mar 2012 20:50:38 GMT

    [ 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

        

Mime
View raw message