You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2007/01/31 16:16:36 UTC

svn commit: r501860 - in /incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core: ActiveMQSession.cpp ActiveMQSession.h

Author: tabish
Date: Wed Jan 31 07:16:35 2007
New Revision: 501860

URL: http://svn.apache.org/viewvc?view=rev&rev=501860
Log:
http://issues.apache.org/activemq/browse/AMQCPP-63

Fixed a potential memory leak in the Session.

Modified:
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQSession.cpp
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQSession.h

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQSession.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQSession.cpp?view=diff&rev=501860&r1=501859&r2=501860
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQSession.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQSession.cpp Wed Jan 31 07:16:35 2007
@@ -124,6 +124,9 @@
         
         // Stop the Async Thread if its running
         stopThread();
+
+        // Remove any unsent cloned messages.
+        purgeMessages();
     }
     AMQ_CATCH_NOTHROW( ActiveMQException )
     AMQ_CATCHALL_NOTHROW( )
@@ -743,6 +746,26 @@
             asyncThread = NULL;
         }
     }        
+    AMQ_CATCH_RETHROW( ActiveMQException )
+    AMQ_CATCHALL_THROW( ActiveMQException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void ActiveMQSession::purgeMessages() throw ( ActiveMQException )
+{
+    try
+    {
+        synchronized( &msgQueue )
+        {
+            while( !msgQueue.empty() )
+            {
+                // destroy these messages if this is not a transacted
+                // session, if it is then the tranasction will clean 
+                // the messages up.
+                delete msgQueue.pop().first;
+            }
+        }
+    }
     AMQ_CATCH_RETHROW( ActiveMQException )
     AMQ_CATCHALL_THROW( ActiveMQException )
 }

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQSession.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQSession.h?view=diff&rev=501860&r1=501859&r2=501860
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQSession.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQSession.h Wed Jan 31 07:16:35 2007
@@ -331,12 +331,18 @@
          * is invoked, which means that the caller is choosing to use this
          * consumer asynchronously instead of synchronously (receive).
          */
-        void startThread() throw (exceptions::ActiveMQException);
+        void startThread() throw ( exceptions::ActiveMQException );
         
         /**
          * Stops the asynchronous message processing thread if it's started.
          */
-        void stopThread() throw (exceptions::ActiveMQException);
+        void stopThread() throw ( exceptions::ActiveMQException );
+
+        /**
+         * Purges all messages currently in the queue.  This can be as a
+         * result of a rollback, or of the consumer being shutdown.
+         */
+        virtual void purgeMessages() throw ( exceptions::ActiveMQException );
 
     };