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 2009/06/22 19:57:58 UTC
svn commit: r787332 - in /qpid/trunk/qpid/cpp/src/qpid/amqp_0_10:
SessionHandler.cpp SessionHandler.h
Author: aconway
Date: Mon Jun 22 17:57:58 2009
New Revision: 787332
URL: http://svn.apache.org/viewvc?rev=787332&view=rev
Log:
Log an error only the first time a detached session is used, ignore after that.
Modified:
qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.cpp
qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.cpp?rev=787332&r1=787331&r2=787332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.cpp Mon Jun 22 17:57:58 2009
@@ -34,7 +34,12 @@
using namespace framing;
using namespace std;
-#define CHECK_ATTACHED(MSG) if (!getState()) throw NotAttachedException(QPID_MSG(MSG << ": channel " << channel.get() << " is not attached"))
+void SessionHandler::checkAttached() {
+ if (!getState()) {
+ ignoring = true;
+ throw NotAttachedException(QPID_MSG("Channel " << channel.get() << " is not attached"));
+ }
+}
SessionHandler::SessionHandler(FrameHandler* out, ChannelId ch)
: channel(ch, out), peer(channel), ignoring(false), sendReady(), receiveReady() {}
@@ -76,7 +81,7 @@
else if (isSessionControl(m))
invoke(*m);
else {
- CHECK_ATTACHED("receiving " << f);
+ checkAttached();
if (!receiveReady)
throw IllegalStateException(QPID_MSG(getState()->getId() << ": Not ready to receive data"));
if (!getState()->receiverRecord(f))
@@ -122,7 +127,7 @@
} // namespace
void SessionHandler::handleOut(AMQFrame& f) {
- CHECK_ATTACHED("sending " << f);
+ checkAttached();
if (!sendReady)
throw IllegalStateException(QPID_MSG(getState()->getId() << ": Not ready to send data"));
getState()->senderRecord(f);
@@ -153,7 +158,7 @@
}
#define CHECK_NAME(NAME, MSG) do { \
- CHECK_ATTACHED(MSG); \
+ checkAttached(); \
if (NAME != getState()->getId().getName()) \
throw InvalidArgumentException( \
QPID_MSG(MSG << ": incorrect session name: " << NAME \
@@ -186,18 +191,18 @@
}
void SessionHandler::requestTimeout(uint32_t t) {
- CHECK_ATTACHED("session.request-timeout");
+ checkAttached();
getState()->setTimeout(t);
peer.timeout(t);
}
void SessionHandler::timeout(uint32_t t) {
- CHECK_ATTACHED("session.request-timeout");
+ checkAttached();
getState()->setTimeout(t);
}
void SessionHandler::commandPoint(const SequenceNumber& id, uint64_t offset) {
- CHECK_ATTACHED("session.command-point");
+ checkAttached();
getState()->receiverSetCommandPoint(SessionPoint(id, offset));
if (!receiveReady) {
receiveReady = true;
@@ -206,7 +211,7 @@
}
void SessionHandler::expected(const SequenceSet& commands, const Array& /*fragments*/) {
- CHECK_ATTACHED("session.expected");
+ checkAttached();
if (getState()->hasState()) { // Replay
if (commands.empty()) throw IllegalStateException(
QPID_MSG(getState()->getId() << ": has state but client is attaching as new session."));
@@ -222,14 +227,14 @@
}
void SessionHandler::confirmed(const SequenceSet& commands, const Array& /*fragments*/) {
- CHECK_ATTACHED("session.confirmed");
+ checkAttached();
// Ignore non-contiguous confirmations.
if (!commands.empty() && commands.front() >= getState()->senderGetReplayPoint())
getState()->senderConfirmed(commands.rangesBegin()->last());
}
void SessionHandler::completed(const SequenceSet& commands, bool timelyReply) {
- CHECK_ATTACHED("session.completed");
+ checkAttached();
getState()->senderCompleted(commands);
if (getState()->senderNeedKnownCompleted() || timelyReply) {
peer.knownCompleted(commands);
@@ -238,12 +243,12 @@
}
void SessionHandler::knownCompleted(const SequenceSet& commands) {
- CHECK_ATTACHED("session.known-completed");
+ checkAttached();
getState()->receiverKnownCompleted(commands);
}
void SessionHandler::flush(bool expected, bool confirmed, bool completed) {
- CHECK_ATTACHED("session.flush");
+ checkAttached();
if (expected) {
SequenceSet expectSet;
if (getState()->hasState())
@@ -267,13 +272,13 @@
void SessionHandler::sendDetach()
{
- CHECK_ATTACHED("session.sendDetach");
+ checkAttached();
ignoring = true;
peer.detach(getState()->getId().getName());
}
void SessionHandler::sendCompletion() {
- CHECK_ATTACHED("session.send-completion");
+ checkAttached();
const SequenceSet& c = getState()->receiverGetUnknownComplete();
peer.completed(c, getState()->receiverNeedKnownCompleted());
}
@@ -302,7 +307,7 @@
}
void SessionHandler::sendTimeout(uint32_t t) {
- CHECK_ATTACHED("session.send-timeout");
+ checkAttached();
peer.requestTimeout(t);
}
Modified: qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h?rev=787332&r1=787331&r2=787332&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h Mon Jun 22 17:57:58 2009
@@ -107,6 +107,7 @@
std::string name;
private:
+ void checkAttached();
void sendCommandPoint(const SessionPoint&);
};
}} // namespace qpid::amqp_0_10
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org