You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2007/03/21 17:01:46 UTC

svn commit: r520924 - in /incubator/qpid/trunk/qpid/cpp: lib/broker/Broker.cpp lib/broker/Broker.h lib/broker/BrokerMessageBase.h lib/broker/BrokerMessageMessage.cpp lib/broker/BrokerMessageMessage.h lib/common/framing/AMQRequestBody.h tests/.vg-supp

Author: gsim
Date: Wed Mar 21 09:01:45 2007
New Revision: 520924

URL: http://svn.apache.org/viewvc?view=rev&rev=520924
Log:
Modifications to allow messages produced by the message class to be persisted as well as those from the basic class.
Fix to broker initialisation (ensure queues use the correct store).


Modified:
    incubator/qpid/trunk/qpid/cpp/lib/broker/Broker.cpp
    incubator/qpid/trunk/qpid/cpp/lib/broker/Broker.h
    incubator/qpid/trunk/qpid/cpp/lib/broker/BrokerMessageBase.h
    incubator/qpid/trunk/qpid/cpp/lib/broker/BrokerMessageMessage.cpp
    incubator/qpid/trunk/qpid/cpp/lib/broker/BrokerMessageMessage.h
    incubator/qpid/trunk/qpid/cpp/lib/common/framing/AMQRequestBody.h
    incubator/qpid/trunk/qpid/cpp/tests/.vg-supp

Modified: incubator/qpid/trunk/qpid/cpp/lib/broker/Broker.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/lib/broker/Broker.cpp?view=diff&rev=520924&r1=520923&r2=520924
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/lib/broker/Broker.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/lib/broker/Broker.cpp Wed Mar 21 09:01:45 2007
@@ -47,17 +47,13 @@
 
 Broker::Broker(const Configuration& conf) :
     config(conf),
+    store(createStore(conf)),
     queues(store.get()),
     timeout(30000),
     stagingThreshold(0),
     cleaner(&queues, timeout/10),
     factory(*this)
 {
-    if (config.getStore().empty())
-        store.reset(new NullMessageStore(config.isTrace()));
-    else
-        store.reset(new MessageStoreModule(config.getStore()));
-
     exchanges.declare(empty, DirectExchange::typeName); // Default exchange.
     exchanges.declare(amq_direct, DirectExchange::typeName);
     exchanges.declare(amq_topic, TopicExchange::typeName);
@@ -84,6 +80,13 @@
 Broker::shared_ptr Broker::create(const Configuration& config) {
     return Broker::shared_ptr(new Broker(config));
 }    
+
+MessageStore* Broker::createStore(const Configuration& config) {
+    if (config.getStore().empty())
+        return new NullMessageStore(config.isTrace());
+    else
+        return new MessageStoreModule(config.getStore());
+}
         
 void Broker::run() {
     getAcceptor().run(&factory);

Modified: incubator/qpid/trunk/qpid/cpp/lib/broker/Broker.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/lib/broker/Broker.h?view=diff&rev=520924&r1=520923&r2=520924
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/lib/broker/Broker.h (original)
+++ incubator/qpid/trunk/qpid/cpp/lib/broker/Broker.h Wed Mar 21 09:01:45 2007
@@ -90,13 +90,15 @@
 
     Configuration config;
     sys::Acceptor::shared_ptr acceptor;
-    std::auto_ptr<MessageStore> store;
+    const std::auto_ptr<MessageStore> store;
     QueueRegistry queues;
     ExchangeRegistry exchanges;
     uint32_t timeout;
     uint64_t stagingThreshold;
     AutoDelete cleaner;
     ConnectionFactory factory;
+
+    static MessageStore* createStore(const Configuration& config);
 };
 
 }}

Modified: incubator/qpid/trunk/qpid/cpp/lib/broker/BrokerMessageBase.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/lib/broker/BrokerMessageBase.h?view=diff&rev=520924&r1=520923&r2=520924
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/lib/broker/BrokerMessageBase.h (original)
+++ incubator/qpid/trunk/qpid/cpp/lib/broker/BrokerMessageBase.h Wed Mar 21 09:01:45 2007
@@ -121,22 +121,18 @@
         return publisher;
     }
 
-    virtual void encode(framing::Buffer& /*buffer*/) {}; // XXXX: Only used in tests?
-    virtual void encodeHeader(framing::Buffer& /*buffer*/) {}; // XXXX: Only used in tests?
+    virtual void encode(framing::Buffer& buffer) = 0;
+    virtual void encodeHeader(framing::Buffer& buffer) = 0;
 
     /**
      * @returns the size of the buffer needed to encode this
      * message in its entirety
-     * 
-     * XXXX: Only used in tests?
      */
     virtual uint32_t encodedSize() = 0;
     /**
      * @returns the size of the buffer needed to encode the
      * 'header' of this message (not just the header frame,
      * but other meta data e.g.routing key and exchange)
-     * 
-     * XXXX: Only used in tests?
      */
     virtual uint32_t encodedHeaderSize() = 0;
     /**
@@ -149,6 +145,10 @@
      * content size else returns 0.
      */
     virtual uint64_t expectedContentSize() = 0;
+
+    virtual void decodeHeader(framing::Buffer& buffer) = 0;
+    virtual void decodeContent(framing::Buffer& buffer, uint32_t contentChunkSize = 0) = 0;
+
             
     // TODO: AMS 29/1/2007 Don't think these are really part of base class
             

Modified: incubator/qpid/trunk/qpid/cpp/lib/broker/BrokerMessageMessage.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/lib/broker/BrokerMessageMessage.cpp?view=diff&rev=520924&r1=520923&r2=520924
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/lib/broker/BrokerMessageMessage.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/lib/broker/BrokerMessageMessage.cpp Wed Mar 21 09:01:45 2007
@@ -26,6 +26,7 @@
 #include "MessageCloseBody.h"
 #include "MessageAppendBody.h"
 #include "Reference.h"
+#include "framing/AMQFrame.h"
 #include "framing/FieldTable.h"
 #include "framing/BasicHeaderProperties.h"
 
@@ -61,6 +62,11 @@
     reference(reference_)
 {}
 
+/**
+ * Currently used by message store impls to recover messages 
+ */
+MessageMessage::MessageMessage() : transfer(new MessageTransferBody(qpid::framing::highestProtocolVersion)) {}
+
 // TODO: astitcher 1-Mar-2007: This code desperately needs better factoring
 void MessageMessage::transferMessage(
     framing::ChannelAdapter& channel, 
@@ -213,27 +219,82 @@
 
 uint32_t MessageMessage::encodedSize()
 {
-    THROW_QPID_ERROR(INTERNAL_ERROR, "Unfinished");
-    return 0;               // FIXME aconway 2007-02-05: 
+    return encodedHeaderSize() + encodedContentSize();
 }
 
 uint32_t MessageMessage::encodedHeaderSize()
 {
-    THROW_QPID_ERROR(INTERNAL_ERROR, "Unfinished");
-    return 0;               // FIXME aconway 2007-02-05: 
+    return transfer->size() - transfer->baseSize(); 
 }
 
 uint32_t MessageMessage::encodedContentSize()
 {
-    THROW_QPID_ERROR(INTERNAL_ERROR, "Unfinished");
-    return 0;               // FIXME aconway 2007-02-05: 
+    return 0;
 }
 
 uint64_t MessageMessage::expectedContentSize()
 {
-    THROW_QPID_ERROR(INTERNAL_ERROR, "Unfinished");
-    return 0;               // FIXME aconway 2007-02-05: 
+    return 0;
+}
+
+void MessageMessage::encode(Buffer& buffer)
+{
+    encodeHeader(buffer);
+}
+
+void MessageMessage::encodeHeader(Buffer& buffer)
+{
+    if (transfer->getBody().isInline()) {
+        transfer->encodeContent(buffer);
+    } else {
+        string data;
+        for(Reference::Appends::const_iterator a = reference->getAppends().begin(); a != reference->getAppends().end(); ++a) {
+            data += (*a)->getBytes();
+        }
+        framing::Content body(INLINE, data);
+        std::auto_ptr<MessageTransferBody> copy(copyTransfer(transfer->version, transfer->getDestination(), body));
+        copy->encodeContent(buffer);
+    }
+}
+
+void MessageMessage::decodeHeader(Buffer& buffer)
+{
+    transfer->decodeContent(buffer);
+}
+
+void MessageMessage::decodeContent(Buffer& /*buffer*/, uint32_t /*chunkSize*/)
+{    
 }
 
 
+MessageTransferBody* MessageMessage::copyTransfer(const ProtocolVersion& version,
+                                                  const string& destination, 
+                                                  const framing::Content& body)
+{
+    return new MessageTransferBody(version, 
+                                   transfer->getTicket(),
+                                   destination,
+                                   getRedelivered(),
+                                   transfer->getImmediate(),
+                                   transfer->getTtl(),
+                                   transfer->getPriority(),
+                                   transfer->getTimestamp(),
+                                   transfer->getDeliveryMode(),
+                                   transfer->getExpiration(),
+                                   getExchange(),
+                                   getRoutingKey(),
+                                   transfer->getMessageId(),
+                                   transfer->getCorrelationId(),
+                                   transfer->getReplyTo(),
+                                   transfer->getContentType(),
+                                   transfer->getContentEncoding(),
+                                   transfer->getUserId(),
+                                   transfer->getAppId(),
+                                   transfer->getTransactionId(),
+                                   transfer->getSecurityToken(),
+                                   transfer->getApplicationHeaders(),
+                                   body,
+                                   transfer->getMandatory());
+
+}
 }} // namespace qpid::broker

Modified: incubator/qpid/trunk/qpid/cpp/lib/broker/BrokerMessageMessage.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/lib/broker/BrokerMessageMessage.h?view=diff&rev=520924&r1=520923&r2=520924
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/lib/broker/BrokerMessageMessage.h (original)
+++ incubator/qpid/trunk/qpid/cpp/lib/broker/BrokerMessageMessage.h Wed Mar 21 09:01:45 2007
@@ -45,6 +45,7 @@
 
     MessageMessage(ConnectionToken* publisher, framing::RequestId, TransferPtr transfer);
     MessageMessage(ConnectionToken* publisher, framing::RequestId, TransferPtr transfer, ReferencePtr reference);
+    MessageMessage();
             
     // Default destructor okay
 
@@ -70,15 +71,22 @@
     const framing::FieldTable& getApplicationHeaders();
     bool isPersistent();
             
+    void encode(framing::Buffer& buffer);
+    void encodeHeader(framing::Buffer& buffer);
     uint32_t encodedSize();
     uint32_t encodedHeaderSize();
     uint32_t encodedContentSize();
     uint64_t expectedContentSize();
+    void decodeHeader(framing::Buffer& buffer);
+    void decodeContent(framing::Buffer& buffer, uint32_t contentChunkSize = 0);
 
   private:
-  	void transferMessage(framing::ChannelAdapter& channel, 
-    					 const std::string& consumerTag, 
-    					 uint32_t framesize);
+    void transferMessage(framing::ChannelAdapter& channel, 
+                         const std::string& consumerTag, 
+                         uint32_t framesize);
+    framing::MessageTransferBody* copyTransfer(const framing::ProtocolVersion& version,
+                                               const std::string& destination, 
+                                               const framing::Content& body);
   
     framing::RequestId requestId;
     const TransferPtr transfer;

Modified: incubator/qpid/trunk/qpid/cpp/lib/common/framing/AMQRequestBody.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/lib/common/framing/AMQRequestBody.h?view=diff&rev=520924&r1=520923&r2=520924
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/lib/common/framing/AMQRequestBody.h (original)
+++ incubator/qpid/trunk/qpid/cpp/lib/common/framing/AMQRequestBody.h Wed Mar 21 09:01:45 2007
@@ -63,8 +63,8 @@
     void setResponseMark(ResponseId mark) { data.responseMark=mark; }
 
     bool isRequest()const { return true; }
-  protected:
     static const uint32_t baseSize() { return AMQMethodBody::baseSize()+20; }
+  protected:
     void printPrefix(std::ostream& out) const;
     
   private:

Modified: incubator/qpid/trunk/qpid/cpp/tests/.vg-supp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/tests/.vg-supp?view=diff&rev=520924&r1=520923&r2=520924
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/tests/.vg-supp (original)
+++ incubator/qpid/trunk/qpid/cpp/tests/.vg-supp Wed Mar 21 09:01:45 2007
@@ -4703,3 +4703,415 @@
    obj:*
    obj:*
 }
+{
+   x26763_1
+   Memcheck:Leak
+   fun:_Znwj
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+   fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+   fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+   fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+   fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+   fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+}
+{
+   x26763_2
+   Memcheck:Leak
+   fun:_Znwj
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+   fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+   fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+   fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+   fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+   fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+   fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+   fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+}
+{
+   x26763_3
+   Memcheck:Leak
+   fun:_Znwj
+   obj:*
+   obj:*
+   fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+   obj:*
+   obj:*
+   fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+   fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+   fun:_Z8runTestsRK17CommandLineParser
+   fun:main
+}
+{
+   x26763_4
+   Memcheck:Leak
+   fun:_Znwj
+   obj:*
+   obj:*
+   obj:*
+   fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+   obj:*
+   obj:*
+   fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+   fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+   fun:_Z8runTestsRK17CommandLineParser
+   fun:main
+}
+{
+   x26763_5
+   Memcheck:Leak
+   fun:malloc
+   fun:_dl_map_object_deps
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:do_dlopen
+   fun:_dl_catch_error
+   fun:__libc_dlopen_mode
+   fun:pthread_cancel_init
+   fun:_Unwind_ForcedUnwind
+   fun:__pthread_unwind
+   fun:pthread_exit
+   fun:pthread_exit
+   obj:*
+   obj:*
+   obj:*
+   fun:start_thread
+   fun:clone
+}
+{
+   x26763_6
+   Memcheck:Leak
+   fun:_Znwj
+   obj:*
+   fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+   obj:*
+   obj:*
+   fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+   fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+   fun:_Z8runTestsRK17CommandLineParser
+   fun:main
+}
+{
+   x26763_7
+   Memcheck:Leak
+   fun:_Znwj
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+   obj:*
+   obj:*
+   fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+   fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+   fun:_Z8runTestsRK17CommandLineParser
+   fun:main
+}
+{
+   x26763_8
+   Memcheck:Leak
+   fun:_Znwj
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+   obj:*
+   obj:*
+   fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+   fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+   fun:_Z8runTestsRK17CommandLineParser
+   fun:main
+}
+{
+   x26763_9
+   Memcheck:Leak
+   fun:_Znwj
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+   obj:*
+   obj:*
+   fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+   fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+   fun:_Z8runTestsRK17CommandLineParser
+   fun:main
+}
+{
+   x26763_10
+   Memcheck:Leak
+   fun:_Znwj
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+   obj:*
+   obj:*
+   fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+   fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+   fun:_Z8runTestsRK17CommandLineParser
+   fun:main
+}
+{
+   x26763_11
+   Memcheck:Leak
+   fun:_Znwj
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+   obj:*
+   obj:*
+   fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+   fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+   fun:_Z8runTestsRK17CommandLineParser
+}
+{
+   x26763_12
+   Memcheck:Leak
+   fun:calloc
+   fun:_dl_allocate_tls
+   fun:pthread_create@@GLIBC_2.1
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+   obj:*
+   obj:*
+   fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+   fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+   fun:_Z8runTestsRK17CommandLineParser
+   fun:main
+}
+{
+   x26763_13
+   Memcheck:Leak
+   fun:_Znwj
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+   obj:*
+   obj:*
+   fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+   fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+   fun:_Z8runTestsRK17CommandLineParser
+   fun:main
+}
+{
+   x26763_14
+   Memcheck:Leak
+   fun:_Znwj
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+   fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+   fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+   fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+   fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+   fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+   fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+   fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+   fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+}
+{
+   x26763_15
+   Memcheck:Leak
+   fun:_Znwj
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+   fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+   fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+   fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+   fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+   fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+   fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+   fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+   fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+   fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+   fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+   fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+   fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+   fun:_Z8runTestsRK17CommandLineParser
+   fun:main
+}
+{
+   x26763_16
+   Memcheck:Leak
+   fun:_Znwj
+   fun:_ZNSs4_Rep9_S_createEjjRKSaIcE
+   obj:/usr/lib/libstdc++.so.6.0.8
+   fun:_ZNSsC1EPKcRKSaIcE
+   obj:*
+   obj:*
+   obj:*
+   fun:call_init
+   fun:_dl_init
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@GLIBC_2.0
+   fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+   fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+   fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+   fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+   fun:_Z8runTestsRK17CommandLineParser
+   fun:main
+}
+{
+   x26763_17
+   Memcheck:Leak
+   fun:_Znwj
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+   fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+   fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+   fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+   fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+   fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+   fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+   fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+   fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+   fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+   fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+}
+{
+   x26763_18
+   Memcheck:Leak
+   fun:_Znwj
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+   obj:*
+   obj:*
+   fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+   fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+}