diff options
| author | Gordon Sim <gsim@apache.org> | 2009-03-24 14:06:01 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2009-03-24 14:06:01 +0000 |
| commit | 0d436a14d37a9cedfc9d28444ff557d99d3a3a48 (patch) | |
| tree | ef029282d6f7eec753350b97464fa6234c22ab0e | |
| parent | c364e790cb59ae6bbdb72aa2d82fb70b9553635d (diff) | |
| download | qpid-python-0d436a14d37a9cedfc9d28444ff557d99d3a3a48.tar.gz | |
QPID-1771: fix for the codepath where an empty frame is sent to trigger read credit
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.5-release@757807 13f79535-47bb-0310-9956-ffa450edef68
| -rw-r--r-- | qpid/cpp/src/qpid/cluster/Decoder.cpp | 5 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/cluster/EventFrame.cpp | 4 |
2 files changed, 6 insertions, 3 deletions
diff --git a/qpid/cpp/src/qpid/cluster/Decoder.cpp b/qpid/cpp/src/qpid/cluster/Decoder.cpp index 4de586d89f..b337ef43f4 100644 --- a/qpid/cpp/src/qpid/cluster/Decoder.cpp +++ b/qpid/cpp/src/qpid/cluster/Decoder.cpp @@ -47,12 +47,13 @@ void Decoder::decode(const EventHeader& eh, const char* data) { // We must give 1 unit read credit per event. // This event does not complete any frames so // send an empty frame with the read credit. - process(EventFrame(EventHeader(), framing::AMQFrame(), 1)); + process(EventFrame(eh, framing::AMQFrame(), 1)); } } void Decoder::process(const EventFrame& ef) { - if (ef.frame.getMethod() && ef.frame.getMethod()->isA<framing::ClusterConnectionDeliverCloseBody>()) + //need to check that this is not the empty frame mentioned above + if (ef.frame.getBody() && ef.frame.getMethod() && ef.frame.getMethod()->isA<framing::ClusterConnectionDeliverCloseBody>()) map.erase(ef.connectionId); callback(ef); } diff --git a/qpid/cpp/src/qpid/cluster/EventFrame.cpp b/qpid/cpp/src/qpid/cluster/EventFrame.cpp index 8259b6da6e..9350c801f5 100644 --- a/qpid/cpp/src/qpid/cluster/EventFrame.cpp +++ b/qpid/cpp/src/qpid/cluster/EventFrame.cpp @@ -33,7 +33,9 @@ EventFrame::EventFrame(const EventHeader& e, const framing::AMQFrame& f, int rc) } std::ostream& operator<<(std::ostream& o, const EventFrame& e) { - return o << e.frame << " " << e.type << " " << e.connectionId; + if (e.frame.getBody()) o << e.frame; + else o << "null-frame"; + o << " " << e.type << " " << e.connectionId; if (e.readCredit) o << " read-credit=" << e.readCredit; return o; } |
