Hi,
I'm having a similar issue: using activeme-cpp 3.1.1, there is a large
memory leak when sending text messages. Here's a code snippet:
Here's the setup in my run method:
{
// Create a ConnectionFactory
auto_ptr<ConnectionFactory> connectionFactory(
ConnectionFactory::createCMSConnectionFactory( brokerURI ) );
// Create a Connection
connection = connectionFactory->createConnection();
connection->start();
// Create a Session
session = connection->createSession( Session::AUTO_ACKNOWLEDGE );
// Create the destination
destination = session->createTopic( topicName );
// Create a MessageProducer from the Session to the Topic or Queue
producer = session->createProducer( destination );
producer->setDeliveryMode( DeliveryMode::NON_PERSISTENT );
// Wait until the caller tells us we're done.
doneLatch.await();
}
void Producer::sendMessage( const std::string& messageArg)
{
TextMessage* message = session->createTextMessage( messageArg );
producer->setTimeToLive( 10000 );
producer->send( message );
delete message;
} // End of sendMessage()
If I comment out the producer->send() line, no leak. Any help would be
appreciated! Thanks.
Timothy Bish wrote:
>
> On Fri, 2010-02-26 at 07:14 -0800, opernas wrote:
>> Version is 3.1.0
>>
> Please give 3.1.1 a try as there were several fixes in that release for
> memory leaks.
>
> Regards
>
>
>>
>> Timothy Bish wrote:
>> >
>> > On Fri, 2010-02-26 at 03:45 -0800, opernas wrote:
>> >>
>> >> Like I said, this issue occurred with my app but in SimpleProducer.cpp
>> >> sample too. If you take SimpleProducer.cpp and put DeliverMode flag to
>> >> PERSISTENT (instead of NON_PERSISTENT).
>> >>
>> >> ==3085== 160 bytes in 20 blocks are definitely lost in loss record 27
>> of
>> >> 40
>> >>
>> >> ==3085== at 0x40253C5: operator new(unsigned int)
>> >> (vg_replace_malloc.c:214)
>> >>
>> >>
>> >> ==3085== by 0x4313A16:
>> >> activemq::core::ActiveMQSession::send(cms::Message*,
>> >> activemq::core::ActiveMQProducer*, activemq::util::Usage*)
>> (Pointer.h:45)
>> >> ==3085== by 0x430843E:
>> >> activemq::core::ActiveMQProducer::send(cms::Destination const*,
>> >> cms::Message*, int, int, long long) (ActiveMQProducer.cpp:197)
>> >>
>> >> ==3085== by 0x43065F6:
>> >> activemq::core::ActiveMQProducer::send(cms::Destination const*,
>> >> cms::Message*) (ActiveMQProducer.cpp:134)
>> >>
>> >> ==3085== by 0x43074FA:
>> >> activemq::core::ActiveMQProducer::send(cms::Message*)
>> >> (ActiveMQProducer.cpp:102)
>> >>
>> >> ==3085== by 0x8049F4D: SimpleProducer::run() (prueba.cpp:126)
>> >>
>> >>
>> >> ==3085== by 0x804928A: main (prueba.cpp:227)
>> >>
>> >>
>> >> ==3085== LEAK SUMMARY:
>> >> ==3085== definitely lost: 7,280 bytes in 40 blocks
>> >> ==3085== indirectly lost: 10,406 bytes in 468 blocks
>> >> ==3085== possibly lost: 784 bytes in 6 blocks
>> >> ==3085== still reachable: 28 bytes in 1 blocks
>> >> ==3085== suppressed: 0 bytes in 0 blocks
>> >>
>> >> Is in the producer->send() call... but I dont know if I've some
>> mistake,
>> >> or
>> >> if a put PERSISTENT, i need to do something else... i've tried
>> different
>> >> ackwnoledge methods, but i've still loosing memory.
>> >>
>> >>
>> >
>> > It would help to know the version of the client you are using. The
>> most
>> > recent 3.1.1 release has several memory and resource leak fixes in it.
>> >
>> > 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/
>> >
>> >
>> >
>>
>
> --
> 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/
>
>
>
--
View this message in context:
http://old.nabble.com/ActiveMQ-CPP%3A-memory-leak-with-persistent-sendings--tp27716173p27872774.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.