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