You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2008/06/13 14:30:02 UTC
svn commit: r667503 -
/incubator/qpid/trunk/qpid/cpp/src/qpid/SessionState.cpp
Author: aconway
Date: Fri Jun 13 05:30:02 2008
New Revision: 667503
URL: http://svn.apache.org/viewvc?rev=667503&view=rev
Log:
Fix bug in SessionState - avoid all replay calculations for timeout==0.
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/SessionState.cpp
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/SessionState.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/SessionState.cpp?rev=667503&r1=667502&r2=667503&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/SessionState.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/SessionState.cpp Fri Jun 13 05:30:02 2008
@@ -99,6 +99,8 @@
SessionPoint SessionState::senderGetReplayPoint() const { return sender.replayPoint; }
SessionState::ReplayRange SessionState::senderExpected(const SessionPoint& expect) {
+ if (timeout == 0)
+ return SessionState::ReplayRange();
if (expect < sender.replayPoint || sender.sendPoint < expect)
throw InvalidArgumentException(QPID_MSG(getId() << ": expected command-point out of range."));
QPID_LOG(debug, getId() << ": sender expected point moved to " << expect);
@@ -114,22 +116,24 @@
if (isControl(f)) return; // Ignore control frames.
QPID_LOG_IF(debug, f.getMethod(), getId() << ": sent cmd " << sender.sendPoint.command << ": " << *f.getMethod());
stateful = true;
- if (timeout) sender.replayList.push_back(f);
- sender.unflushedSize += f.size();
+ if (timeout) {
+ sender.replayList.push_back(f);
+ sender.replaySize += f.size();
+ sender.unflushedSize += f.size();
+ if (config.replayHardLimit && config.replayHardLimit < sender.replaySize)
+ throw ResourceLimitExceededException("Replay buffer exceeeded hard limit");
+ }
sender.bytesSinceKnownCompleted += f.size();
- sender.replaySize += f.size();
sender.incomplete += sender.sendPoint.command;
sender.sendPoint.advance(f);
- if (config.replayHardLimit && config.replayHardLimit < sender.replaySize)
- throw ResourceLimitExceededException("Replay buffer exceeeded hard limit");
}
bool SessionState::senderNeedFlush() const {
- return config.replayFlushLimit && sender.unflushedSize >= config.replayFlushLimit;
+ return timeout != 0 && config.replayFlushLimit && sender.unflushedSize >= config.replayFlushLimit;
}
void SessionState::senderRecordFlush() {
- assert(sender.flushPoint <= sender.sendPoint);
+ if (timeout == 0) return;
sender.flushPoint = sender.sendPoint;
sender.unflushedSize = 0;
}
@@ -143,6 +147,7 @@
}
void SessionState::senderConfirmed(const SessionPoint& confirmed) {
+ if (timeout == 0) return;
if (confirmed > sender.sendPoint)
throw InvalidArgumentException(QPID_MSG(getId() << "Confirmed commands not yet sent."));
QPID_LOG(debug, getId() << ": sender confirmed point moved to " << confirmed);
@@ -158,7 +163,6 @@
if (sender.replayPoint > sender.flushPoint)
sender.flushPoint = sender.replayPoint;
sender.replayList.erase(sender.replayList.begin(), i);
- assert(sender.replayPoint.offset == 0);
}
void SessionState::senderCompleted(const SequenceSet& commands) {