summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2014-01-31 12:25:32 +0000
committerGordon Sim <gsim@apache.org>2014-01-31 12:25:32 +0000
commit60057de2529d0aab0f5492be5a60f8ae87258e3f (patch)
tree56dbf19c0001ebfb5be92a52bc22604c71b2cafd /qpid/cpp/src
parent561105d8014ff4c9e6ad13a713c6ecf91d80a09b (diff)
downloadqpid-python-60057de2529d0aab0f5492be5a60f8ae87258e3f.tar.gz
QPID-5529: remove failed send from delivery buffer
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1563122 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r--qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp b/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp
index 0bf8bef27f..59e1832cfd 100644
--- a/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp
+++ b/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp
@@ -95,11 +95,17 @@ bool SenderContext::send(const qpid::messaging::Message& message, SenderContext:
return true;
} else {
deliveries.push_back(Delivery(nextId++));
- Delivery& delivery = deliveries.back();
- delivery.encode(MessageImplAccess::get(message), address, setToOnSend);
- delivery.send(sender, unreliable);
- *out = &delivery;
- return true;
+ try {
+ Delivery& delivery = deliveries.back();
+ delivery.encode(MessageImplAccess::get(message), address, setToOnSend);
+ delivery.send(sender, unreliable);
+ *out = &delivery;
+ return true;
+ } catch (const std::exception& e) {
+ deliveries.pop_back();
+ --nextId;
+ throw SendError(e.what());
+ }
}
} else {
return false;