added drain_mode flag to bindings; made pn_flowcontroller work with draining 
links


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

Branch: refs/heads/master
Commit: 4126e97244844a0fb47a34208c8727a89052227b
Parents: 9068021
Author: Rafael Schloming <r...@alum.mit.edu>
Authored: Tue Feb 10 16:49:15 2015 -0500
Committer: Rafael Schloming <r...@alum.mit.edu>
Committed: Tue Feb 10 16:49:15 2015 -0500

----------------------------------------------------------------------
 proton-c/bindings/python/proton/__init__.py | 8 ++++++++
 proton-c/src/handlers/flowcontroller.c      | 8 +++-----
 2 files changed, 11 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/4126e972/proton-c/bindings/python/proton/__init__.py
----------------------------------------------------------------------
diff --git a/proton-c/bindings/python/proton/__init__.py 
b/proton-c/bindings/python/proton/__init__.py
index 58c442d..d41a06d 100644
--- a/proton-c/bindings/python/proton/__init__.py
+++ b/proton-c/bindings/python/proton/__init__.py
@@ -2811,6 +2811,14 @@ class Receiver(Link):
       self._check(n)
       return bytes
 
+  def _get_drain(self):
+    return pn_link_get_drain(self._impl)
+
+  def _set_drain(self, b):
+    pn_link_set_drain(self._impl, bool(b))
+
+  drain_mode = property(_get_drain, _set_drain)
+
   def drain(self, n):
     pn_link_drain(self._impl, n)
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/4126e972/proton-c/src/handlers/flowcontroller.c
----------------------------------------------------------------------
diff --git a/proton-c/src/handlers/flowcontroller.c 
b/proton-c/src/handlers/flowcontroller.c
index 903dfe4..91c97ed 100644
--- a/proton-c/src/handlers/flowcontroller.c
+++ b/proton-c/src/handlers/flowcontroller.c
@@ -39,17 +39,15 @@ static void pni_topup(pn_link_t *link, int window) {
 static void pn_flowcontroller_dispatch(pn_handler_t *handler, pn_event_t 
*event) {
   pni_flowcontroller_t *fc = pni_flowcontroller(handler);
   int window = fc->window;
+  pn_link_t *link = pn_event_link(event);
 
   switch (pn_event_type(event)) {
   case PN_LINK_LOCAL_OPEN:
   case PN_LINK_REMOTE_OPEN:
   case PN_LINK_FLOW:
   case PN_DELIVERY:
-    {
-      pn_link_t *link = pn_event_link(event);
-      if (pn_link_is_receiver(link)) {
-        pni_topup(link, window);
-      }
+    if (pn_link_is_receiver(link) && !pn_link_drained(link)) {
+      pni_topup(link, window);
     }
     break;
   default:


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to