Return-Path: X-Original-To: apmail-activemq-dev-archive@www.apache.org Delivered-To: apmail-activemq-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id A335F98F6 for ; Thu, 15 Mar 2012 15:32:06 +0000 (UTC) Received: (qmail 96971 invoked by uid 500); 15 Mar 2012 15:32:06 -0000 Delivered-To: apmail-activemq-dev-archive@activemq.apache.org Received: (qmail 96925 invoked by uid 500); 15 Mar 2012 15:32:06 -0000 Mailing-List: contact dev-help@activemq.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@activemq.apache.org Delivered-To: mailing list dev@activemq.apache.org Received: (qmail 96917 invoked by uid 99); 15 Mar 2012 15:32:06 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 15 Mar 2012 15:32:06 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,T_RP_MATCHES_RCVD X-Spam-Check-By: apache.org Received: from [140.211.11.116] (HELO hel.zones.apache.org) (140.211.11.116) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 15 Mar 2012 15:32:03 +0000 Received: from hel.zones.apache.org (hel.zones.apache.org [140.211.11.116]) by hel.zones.apache.org (Postfix) with ESMTP id BDE7921E52 for ; Thu, 15 Mar 2012 15:31:41 +0000 (UTC) Date: Thu, 15 Mar 2012 15:31:41 +0000 (UTC) From: "Helen Huang (Issue Comment Edited) (JIRA)" To: dev@activemq.apache.org Message-ID: <1282705318.19360.1331825501787.JavaMail.tomcat@hel.zones.apache.org> In-Reply-To: <1340475358.52215.1329514497218.JavaMail.tomcat@hel.zones.apache.org> Subject: [jira] [Issue Comment Edited] (AMQCPP-388) AprPool::getAprPool() returns NULL, causing access violation and application crash MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/AMQCPP-388?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13230234#comment-13230234 ] Helen Huang edited comment on AMQCPP-388 at 3/15/12 3:30 PM: ------------------------------------------------------------- I think adding a call to synchronize the access to "this->config->activeSessions" in ActiveMQConnection.cpp::cleanup() might help. (See details below) I know "this->config->activeSessions" has a mutex to synchronize the addition and removal of a session from that array. But a thread can still use a iterator to access/despose the session directly. void ActiveMQConnection::cleanup() { try{ // Get the complete list of active sessions. //My code this->config->activeSessions->mutex.lock(); std::auto_ptr< Iterator > iter( this->config->activeSessions.iterator() ); // Dispose of all the Session resources we know are still open. while( iter->hasNext() ) { ActiveMQSession* session = iter->next(); try{ session->dispose(); } catch( cms::CMSException& ex ){ /* Absorb */ } } //My code this->config->activeSessions->mutex.unlock(); if( this->config->isConnectionInfoSentToBroker ) { if( !transportFailed.get() && !closing.get() ) { this->syncRequest( this->config->connectionInfo->createRemoveCommand() ); } this->config->isConnectionInfoSentToBroker = false; } if( this->config->userSpecifiedClientID ) { this->config->connectionInfo->setClientId(""); this->config->userSpecifiedClientID = false; } this->config->clientIDSet = false; this->started.set( false ); } AMQ_CATCH_ALL_THROW_CMSEXCEPTION() } was (Author: hhuang): I think adding a mutex to synchronize the access to "this->config->activeSessions" in ActiveMQConnection.cpp could help: void ActiveMQConnection::cleanup() { try{ // Get the complete list of active sessions. std::auto_ptr< Iterator > iter( this->config->activeSessions.iterator() ); // Dispose of all the Session resources we know are still open. while( iter->hasNext() ) { ActiveMQSession* session = iter->next(); try{ session->dispose(); } catch( cms::CMSException& ex ){ /* Absorb */ } } if( this->config->isConnectionInfoSentToBroker ) { if( !transportFailed.get() && !closing.get() ) { this->syncRequest( this->config->connectionInfo->createRemoveCommand() ); } this->config->isConnectionInfoSentToBroker = false; } if( this->config->userSpecifiedClientID ) { this->config->connectionInfo->setClientId(""); this->config->userSpecifiedClientID = false; } this->config->clientIDSet = false; this->started.set( false ); } AMQ_CATCH_ALL_THROW_CMSEXCEPTION() } > 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