On Fri, 2010-02-19 at 06:39 -0800, Ivan Pechorin wrote:
> Hi!
> 
> We use ActiveMQ C++ 3.1.0 client in a multi-threaded application. We use
> activemq::cmsutil::SessionPool and activemq::cmsutil::PooledSession. 
> 
> Today the application crashed because methods createCachedProducer and
> createCachedConsumer do not synchronize access to their shared
> ResourceLifecycleManager, and ResourceLifecycleManager itself is not
> thread-safe.
> 
> Relevant parts of the code are:
> 
> activemq\cmsutil\pooledsession.cpp line 101
> 
>             // Add the producer resource to the resource lifecycle manager.
>             pool->getResourceLifecycleManager()->addMessageProducer( p );
> 
> activemq\cmsutil\resourcelifecyclemanager.h line 95:
> 
>         void addMessageProducer( cms::MessageProducer* producer ) {
>             producers.push_back( producer );
>         }
> 
> I think, ResourceLifecycleManager needs to be thread-safe, i.e. we need to
> add synchronization to all of its add* methods.
> 
> Any suggestions? Maybe I misuse SessionPool or PooledSession somehow?
> 
> Best regards, Ivan

You are probably right, I've not used the CMSTemplate stuff much and
nobody has complained until now so its just gone unnoticed.  Care to
work up a patch for it and create an issue?  There's plenty of snippets
showing how we synchronize in the ActiveMQConnection and ActiveMQSession
classes.

Regards


-- 
Tim Bish

Open Source Integration: http://fusesource.com
ActiveMQ in Action: http://www.manning.com/snyder/

Follow me on Twitter: http://twitter.com/tabish121
My Blog: http://timbish.blogspot.com/

Reply via email to