diff options
| author | Gordon Sim <gsim@apache.org> | 2010-06-15 15:34:10 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2010-06-15 15:34:10 +0000 |
| commit | 71f053b9172cfcd5b2487ca8d96356d6250b346a (patch) | |
| tree | 2a2c94228fb71c69b46d4761f34c86cade6b88e8 /cpp/src/qpid/framing | |
| parent | 12785d64955afa6809e9f76ee7eb68724101c6e7 (diff) | |
| download | qpid-python-71f053b9172cfcd5b2487ca8d96356d6250b346a.tar.gz | |
QPID-2670: copy-on-write when tagging message for loop detection
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@954933 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/framing')
| -rw-r--r-- | cpp/src/qpid/framing/FrameSet.cpp | 10 | ||||
| -rw-r--r-- | cpp/src/qpid/framing/FrameSet.h | 1 |
2 files changed, 11 insertions, 0 deletions
diff --git a/cpp/src/qpid/framing/FrameSet.cpp b/cpp/src/qpid/framing/FrameSet.cpp index c03dd39458..255aaf6e6b 100644 --- a/cpp/src/qpid/framing/FrameSet.cpp +++ b/cpp/src/qpid/framing/FrameSet.cpp @@ -29,6 +29,16 @@ using namespace qpid::framing; using namespace boost; FrameSet::FrameSet(const SequenceNumber& _id) : id(_id),contentSize(0),recalculateSize(true) { } +FrameSet::FrameSet(const FrameSet& original) : id(original.id), contentSize(0), recalculateSize(true) +{ + for (Frames::const_iterator i = original.begin(); i != original.end(); ++i) { + parts.push_back(AMQFrame(*(i->getBody()))); + parts.back().setFirstSegment(i->isFirstSegment()); + parts.back().setLastSegment(i->isLastSegment()); + parts.back().setFirstFrame(i->isFirstFrame()); + parts.back().setLastFrame(i->isLastFrame()); + } +} void FrameSet::append(const AMQFrame& part) { diff --git a/cpp/src/qpid/framing/FrameSet.h b/cpp/src/qpid/framing/FrameSet.h index 398a709353..cae75e5ec8 100644 --- a/cpp/src/qpid/framing/FrameSet.h +++ b/cpp/src/qpid/framing/FrameSet.h @@ -46,6 +46,7 @@ public: typedef boost::shared_ptr<FrameSet> shared_ptr; QPID_COMMON_EXTERN FrameSet(const SequenceNumber& id); + QPID_COMMON_EXTERN FrameSet(const FrameSet&); QPID_COMMON_EXTERN void append(const AMQFrame& part); QPID_COMMON_EXTERN bool isComplete() const; |
