summaryrefslogtreecommitdiff
path: root/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java')
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java31
1 files changed, 28 insertions, 3 deletions
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java
index 1c732d31e6..818bb19c08 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java
@@ -493,13 +493,28 @@ public class Session extends SessionInvoker
}
}
- final private boolean isFull(int id)
+ protected boolean isFull(int id)
{
- return id - maxComplete >= commands.length || commandBytes >= byteLimit;
+ return isCommandsFull(id) || isBytesFull();
+ }
+
+ protected boolean isBytesFull()
+ {
+ return commandBytes >= byteLimit;
+ }
+
+ protected boolean isCommandsFull(int id)
+ {
+ return id - maxComplete >= commands.length;
}
public void invoke(Method m)
{
+ invoke(m,(Runnable)null);
+ }
+
+ public void invoke(Method m, Runnable postIdSettingAction)
+ {
if (m.getEncodedTrack() == Frame.L4)
{
if (m.hasPayload())
@@ -563,6 +578,10 @@ public class Session extends SessionInvoker
int next;
next = commandsOut++;
m.setId(next);
+ if(postIdSettingAction != null)
+ {
+ postIdSettingAction.run();
+ }
if (isFull(next))
{
@@ -625,6 +644,7 @@ public class Session extends SessionInvoker
m.setSync(true);
}
needSync = !m.isSync();
+
try
{
send(m);
@@ -649,7 +669,7 @@ public class Session extends SessionInvoker
// flush every 64K commands to avoid ambiguity on
// wraparound
- if ((next % 65536) == 0)
+ if (shouldIssueFlush(next))
{
try
{
@@ -677,6 +697,11 @@ public class Session extends SessionInvoker
}
}
+ protected boolean shouldIssueFlush(int next)
+ {
+ return (next % 65536) == 0;
+ }
+
public void sync()
{
sync(timeout);