You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2009/07/25 04:38:15 UTC

svn commit: r797705 - in /qpid/trunk/qpid/java: client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java common/src/main/java/org/apache/qpid/transport/Session.java

Author: rhs
Date: Sat Jul 25 02:38:15 2009
New Revision: 797705

URL: http://svn.apache.org/viewvc?rev=797705&view=rev
Log:
fixed session memory leak exposed by SessionCreateTest

Modified:
    qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
    qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java

Modified: qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java?rev=797705&r1=797704&r2=797705&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java (original)
+++ qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java Sat Jul 25 02:38:15 2009
@@ -52,6 +52,8 @@
 import javax.jms.*;
 import javax.jms.IllegalStateException;
 
+import java.lang.ref.WeakReference;
+
 import java.util.Date;
 import java.util.HashMap;
 import java.util.UUID;
@@ -72,6 +74,34 @@
     private static final Logger _logger = LoggerFactory.getLogger(AMQSession_0_10.class);
 
     private static Timer timer = new Timer("ack-flusher", true);
+    private static class Flusher extends TimerTask
+    {
+
+        private WeakReference<AMQSession_0_10> session;
+        public Flusher(AMQSession_0_10 session)
+        {
+            this.session = new WeakReference<AMQSession_0_10>(session);
+        }
+
+        public void run() {
+            AMQSession_0_10 ssn = session.get();
+            if (ssn == null)
+            {
+                cancel();
+            }
+            else
+            {
+                try
+                {
+                    ssn.flushAcknowledgments(true);
+                }
+                catch (Throwable t)
+                {
+                    _logger.error("error flushing acks", t);
+                }
+            }
+        }
+    }
 
 
     /**
@@ -129,20 +159,7 @@
 
         if (maxAckDelay > 0)
         {
-            flushTask = new TimerTask()
-            {
-                public void run()
-                {
-                    try
-                    {
-                        flushAcknowledgments(true);
-                    }
-                    catch (Throwable t)
-                    {
-                        _logger.error("error flushing acks", t);
-                    }
-                }
-            };
+            flushTask = new Flusher(this);
             timer.schedule(flushTask, new Date(), maxAckDelay);
         }
     }
@@ -319,6 +336,7 @@
         if (flushTask != null)
         {
             flushTask.cancel();
+            flushTask = null;
         }
         flushAcknowledgments();
         getQpidSession().sync();

Modified: qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java?rev=797705&r1=797704&r2=797705&view=diff
==============================================================================
--- qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java (original)
+++ qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java Sat Jul 25 02:38:15 2009
@@ -41,7 +41,6 @@
 import static org.apache.qpid.transport.util.Functions.*;
 import static org.apache.qpid.util.Serial.*;
 import static org.apache.qpid.util.Strings.*;
-import java.util.UUID;
 
 /**
  * Session
@@ -226,7 +225,6 @@
     void attach()
     {
         initReceiver();
-        name = new Binary(toUTF8(UUID.randomUUID().toString()));
         sessionAttach(name.getBytes());
         // XXX: when the broker and client support full session
         // recovery we should use expiry as the requested timeout



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org