You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gr...@apache.org on 2010/08/13 15:54:04 UTC
svn commit: r985199 - in
/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport:
ConnectionDelegate.java Session.java SessionDelegate.java
Author: grkvlt
Date: Fri Aug 13 13:54:03 2010
New Revision: 985199
URL: http://svn.apache.org/viewvc?rev=985199&view=rev
Log:
QPID-2797: Change expiry to a boolean correctly representing intent to close
Modified:
qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java
qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java
qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionDelegate.java
Modified: qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java?rev=985199&r1=985198&r2=985199&view=diff
==============================================================================
--- qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java (original)
+++ qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java Fri Aug 13 13:54:03 2010
@@ -85,8 +85,8 @@ public abstract class ConnectionDelegate
@Override public void sessionDetach(Connection conn, SessionDetach dtc)
{
Session ssn = conn.getSession(dtc.getChannel());
- conn.unmap(ssn);
ssn.sessionDetached(dtc.getName(), SessionDetachCode.NORMAL);
+ conn.unmap(ssn);
ssn.closed();
}
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=985199&r1=985198&r2=985199&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 Fri Aug 13 13:54:03 2010
@@ -85,6 +85,7 @@ public class Session extends SessionInvo
private Connection connection;
private Binary name;
private long expiry;
+ private boolean closing;
private int channel;
private SessionDelegate delegate;
private SessionListener listener = new DefaultSessionListener();
@@ -127,6 +128,7 @@ public class Session extends SessionInvo
this.delegate = delegate;
this.name = name;
this.expiry = expiry;
+ this.closing = false;
initReceiver();
}
@@ -145,6 +147,11 @@ public class Session extends SessionInvo
this.expiry = expiry;
}
+ void setClose(boolean close)
+ {
+ this.closing = close;
+ }
+
public int getChannel()
{
return channel;
@@ -599,7 +606,7 @@ public class Session extends SessionInvo
}
catch (SenderException e)
{
- if (expiry > 0)
+ if (!closing)
{
// if expiry is > 0 then this will
// happen again on resume
@@ -637,7 +644,7 @@ public class Session extends SessionInvo
{
sessionCommandPoint(0, 0);
}
- if ((expiry > 0 && !m.isUnreliable()) || m.hasCompletionListener())
+ if ((!closing && !m.isUnreliable()) || m.hasCompletionListener())
{
commands[mod(next, commands.length)] = m;
commandBytes += m.getBodySize();
@@ -654,9 +661,9 @@ public class Session extends SessionInvo
}
catch (SenderException e)
{
- if (expiry > 0)
+ if (!closing)
{
- // if expiry is > 0 then this will happen
+ // if we are not closing then this will happen
// again on resume
log.error(e, "error sending command");
}
@@ -680,7 +687,7 @@ public class Session extends SessionInvo
}
catch (SenderException e)
{
- if (expiry > 0)
+ if (!closing)
{
// if expiry is > 0 then this will happen
// again on resume
@@ -890,13 +897,10 @@ public class Session extends SessionInvo
synchronized (commands)
{
state = CLOSING;
- // XXX: we manually set the expiry to zero here to
- // simulate full session recovery in brokers that don't
- // support it, we should remove this line when there is
- // broker support for full session resume:
- expiry = 0;
+ setClose(true);
sessionRequestTimeout(0);
sessionDetach(name.getBytes());
+
Waiter w = new Waiter(commands, timeout);
while (w.hasTime() && state != CLOSED)
{
@@ -907,9 +911,9 @@ public class Session extends SessionInvo
{
throw new SessionException("close() timed out");
}
+
+ connection.removeSession(this);
}
-
- connection.removeSession(this);
}
public void exception(Throwable t)
@@ -921,7 +925,7 @@ public class Session extends SessionInvo
{
synchronized (commands)
{
- if (expiry == 0 || getException() != null)
+ if (closing || getException() != null)
{
state = CLOSED;
}
Modified: qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionDelegate.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionDelegate.java?rev=985199&r1=985198&r2=985199&view=diff
==============================================================================
--- qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionDelegate.java (original)
+++ qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionDelegate.java Fri Aug 13 13:54:03 2010
@@ -59,7 +59,10 @@ public class SessionDelegate
@Override public void sessionRequestTimeout(Session ssn, SessionRequestTimeout t)
{
- ssn.setExpiry(t.getTimeout());
+ if (t.getTimeout() == 0)
+ {
+ ssn.setClose(true);
+ }
ssn.sessionTimeout(t.getTimeout());
}
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org