NO-JIRA: Update API doc for pn_delivery_settle, add public function 
pn_delivery_current

pn_delivery_settle() has an undocumented side effect: if the delivery is the
current delivery on its link, then the link is automatically advanaced.

Updated the API doc to explain this side effect, and also made public the helper
function pn_delivery_current() so callers can easily tell whether or not this
side effect will occur.


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/aad0884c
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/aad0884c
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/aad0884c

Branch: refs/heads/kgiusti-python3
Commit: aad0884c9cac9e6ff2b92eeb40bf8ff3f5893b16
Parents: bcf01ac
Author: Alan Conway <[email protected]>
Authored: Thu Apr 30 11:15:30 2015 -0400
Committer: Alan Conway <[email protected]>
Committed: Thu Apr 30 11:15:30 2015 -0400

----------------------------------------------------------------------
 proton-c/include/proton/delivery.h | 11 ++++++++++-
 proton-c/src/engine/engine.c       | 10 +++++-----
 2 files changed, 15 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/aad0884c/proton-c/include/proton/delivery.h
----------------------------------------------------------------------
diff --git a/proton-c/include/proton/delivery.h 
b/proton-c/include/proton/delivery.h
index 7eb0dfe..2f7f965 100644
--- a/proton-c/include/proton/delivery.h
+++ b/proton-c/include/proton/delivery.h
@@ -237,13 +237,22 @@ PN_EXTERN void pn_delivery_update(pn_delivery_t 
*delivery, uint64_t state);
  */
 PN_EXTERN void pn_delivery_clear(pn_delivery_t *delivery);
 
-//int pn_delivery_format(pn_delivery_t *delivery);
+/**
+ * Return true if delivery is the current delivery for its link.
+ *
+ * @param[in] delivery a delivery object
+ * @return true if delivery is the current delivery for its link.
+ */
+PN_EXTERN bool pn_delivery_current(pn_delivery_t *delivery);
 
 /**
  * Settle a delivery.
  *
  * A settled delivery can never be used again.
  *
+ * NOTE: if pn_delivery_current(delivery) is true before the call then
+ * pn_link_advance(pn_delivery_link(deliver)) is called automatically.
+ *
  * @param[in] delivery a delivery object
  */
 PN_EXTERN void pn_delivery_settle(pn_delivery_t *delivery);

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/aad0884c/proton-c/src/engine/engine.c
----------------------------------------------------------------------
diff --git a/proton-c/src/engine/engine.c b/proton-c/src/engine/engine.c
index 2454aa2..67cc882 100644
--- a/proton-c/src/engine/engine.c
+++ b/proton-c/src/engine/engine.c
@@ -1553,7 +1553,7 @@ pn_delivery_t *pn_unsettled_next(pn_delivery_t *delivery)
   return d;
 }
 
-bool pn_is_current(pn_delivery_t *delivery)
+bool pn_delivery_current(pn_delivery_t *delivery)
 {
   pn_link_t *link = delivery->link;
   return pn_link_current(link) == delivery;
@@ -1568,7 +1568,7 @@ void pn_delivery_dump(pn_delivery_t *d)
          "remote.settled=%u, updated=%u, current=%u, writable=%u, readable=%u, 
"
          "work=%u}",
          tag, d->local.type, d->remote.type, d->local.settled,
-         d->remote.settled, d->updated, pn_is_current(d),
+         d->remote.settled, d->updated, pn_delivery_current(d),
          pn_delivery_writable(d), pn_delivery_readable(d), d->work);
 }
 
@@ -1789,7 +1789,7 @@ void pn_delivery_settle(pn_delivery_t *delivery)
   assert(delivery);
   if (!delivery->local.settled) {
     pn_link_t *link = delivery->link;
-    if (pn_is_current(delivery)) {
+    if (pn_delivery_current(delivery)) {
       pn_link_advance(link);
     }
 
@@ -1955,14 +1955,14 @@ bool pn_delivery_writable(pn_delivery_t *delivery)
   if (!delivery) return false;
 
   pn_link_t *link = delivery->link;
-  return pn_link_is_sender(link) && pn_is_current(delivery) && 
pn_link_credit(link) > 0;
+  return pn_link_is_sender(link) && pn_delivery_current(delivery) && 
pn_link_credit(link) > 0;
 }
 
 bool pn_delivery_readable(pn_delivery_t *delivery)
 {
   if (delivery) {
     pn_link_t *link = delivery->link;
-    return pn_link_is_receiver(link) && pn_is_current(delivery);
+    return pn_link_is_receiver(link) && pn_delivery_current(delivery);
   } else {
     return false;
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to