Author: kgiusti
Date: Wed Sep 12 13:03:50 2012
New Revision: 1383921

URL: http://svn.apache.org/viewvc?rev=1383921&view=rev
Log:
merge in latest from trunk

Modified:
    qpid/proton/branches/driver_abstraction/   (props changed)
    qpid/proton/branches/driver_abstraction/proton-c/src/driver-internal.h
    qpid/proton/branches/driver_abstraction/proton-c/src/driver.c
    qpid/proton/branches/driver_abstraction/proton-c/src/engine/engine.c
    qpid/proton/branches/driver_abstraction/tests/proton_tests/engine.py

Propchange: qpid/proton/branches/driver_abstraction/
------------------------------------------------------------------------------
  Merged /qpid/proton/trunk:r1382867-1383919

Modified: qpid/proton/branches/driver_abstraction/proton-c/src/driver-internal.h
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/driver_abstraction/proton-c/src/driver-internal.h?rev=1383921&r1=1383920&r2=1383921&view=diff
==============================================================================
--- qpid/proton/branches/driver_abstraction/proton-c/src/driver-internal.h 
(original)
+++ qpid/proton/branches/driver_abstraction/proton-c/src/driver-internal.h Wed 
Sep 12 13:03:50 2012
@@ -93,6 +93,7 @@ struct pn_connector_t {
   char output[PN_CONNECTOR_IO_BUF_SIZE];
   pn_connection_t *connection;
   pn_transport_t *transport;
+  pn_sasl_t *sasl;
   bool input_done;
   bool output_done;
   pn_listener_t *listener;

Modified: qpid/proton/branches/driver_abstraction/proton-c/src/driver.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/driver_abstraction/proton-c/src/driver.c?rev=1383921&r1=1383920&r2=1383921&view=diff
==============================================================================
--- qpid/proton/branches/driver_abstraction/proton-c/src/driver.c (original)
+++ qpid/proton/branches/driver_abstraction/proton-c/src/driver.c Wed Sep 12 
13:03:50 2012
@@ -295,6 +295,7 @@ pn_connector_t *pn_connector_fd(pn_drive
   c->output_size = 0;
   c->connection = NULL;
   c->transport = pn_transport();
+  c->sasl = pn_sasl(c->transport);
   c->input_done = false;
   c->output_done = false;
   c->context = context;
@@ -328,7 +329,7 @@ void pn_connector_trace(pn_connector_t *
 
 pn_sasl_t *pn_connector_sasl(pn_connector_t *ctor)
 {
-  return ctor ? pn_sasl(ctor->transport) : NULL;
+  return ctor ? ctor->sasl : NULL;
 }
 
 void pn_connector_set_connection(pn_connector_t *ctor, pn_connection_t 
*connection)

Modified: qpid/proton/branches/driver_abstraction/proton-c/src/engine/engine.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/driver_abstraction/proton-c/src/engine/engine.c?rev=1383921&r1=1383920&r2=1383921&view=diff
==============================================================================
--- qpid/proton/branches/driver_abstraction/proton-c/src/engine/engine.c 
(original)
+++ qpid/proton/branches/driver_abstraction/proton-c/src/engine/engine.c Wed 
Sep 12 13:03:50 2012
@@ -1436,6 +1436,11 @@ ssize_t pn_input(pn_transport_t *transpo
     } else if (n == 0) {
       break;
     } else {
+      if (n != PN_EOS) {
+        pn_dispatcher_trace(transport->disp, 0, "ERROR[%i] %s\n",
+                            pn_error_code(transport->error),
+                            pn_error_text(transport->error));
+      }
       if (transport->disp->trace & (PN_TRACE_RAW | PN_TRACE_FRM))
         pn_dispatcher_trace(transport->disp, 0, "<- EOS\n");
       return n;
@@ -1629,7 +1634,7 @@ int pn_process_flow_receiver(pn_transpor
     pn_link_state_t *state = pn_link_get_state(ssn_state, rcv);
     if ((int16_t) ssn_state->local_channel >= 0 &&
         (int32_t) state->local_handle >= 0 &&
-        ((state->link_credit != rcv->credit - rcv->queued) || 
!ssn_state->incoming_window)) {
+        ((rcv->drain || state->link_credit != rcv->credit - rcv->queued) || 
!ssn_state->incoming_window)) {
       state->link_credit = rcv->credit - rcv->queued;
       return pn_post_flow(transport, ssn_state, state);
     }
@@ -1779,7 +1784,6 @@ int pn_process_flow_sender(pn_transport_
       if (!tail || !pn_delivery_buffered(tail)) {
         state->delivery_count += state->link_credit;
         state->link_credit = 0;
-        snd->credit = 0;
         snd->drained = false;
         return pn_post_flow(transport, ssn_state, state);
       }
@@ -2026,7 +2030,8 @@ ssize_t pn_send(pn_link_t *sender, const
 
 void pn_drained(pn_link_t *sender)
 {
-  if (sender) {
+  if (sender && sender->drain && sender->credit > 0) {
+    sender->credit = 0;
     sender->drained = true;
     pn_modified(sender->session->connection, &sender->endpoint);
   }

Modified: qpid/proton/branches/driver_abstraction/tests/proton_tests/engine.py
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/driver_abstraction/tests/proton_tests/engine.py?rev=1383921&r1=1383920&r2=1383921&view=diff
==============================================================================
--- qpid/proton/branches/driver_abstraction/tests/proton_tests/engine.py 
(original)
+++ qpid/proton/branches/driver_abstraction/tests/proton_tests/engine.py Wed 
Sep 12 13:03:50 2012
@@ -659,7 +659,7 @@ class CreditTest(Test):
     assert pn_credit(self.snd) == 10
     pn_drained(self.snd)
     assert pn_credit(self.rcv) == 10
-    assert pn_credit(self.snd) == 10
+    assert pn_credit(self.snd) == 0
     self.pump()
     assert pn_credit(self.rcv) == 0
     assert pn_credit(self.snd) == 0
@@ -692,7 +692,7 @@ class CreditTest(Test):
     assert pn_credit(self.snd) == 10
     pn_drained(self.snd)
     assert pn_credit(self.rcv) == 10
-    assert pn_credit(self.snd) == 10
+    assert pn_credit(self.snd) == 0
     self.pump()
     assert pn_credit(self.rcv) == 0
     assert pn_credit(self.snd) == 0
@@ -733,6 +733,44 @@ class CreditTest(Test):
     assert pn_credit(self.rcv) == 0
     assert pn_queued(self.rcv) == 0
 
+  def testDrainZero(self):
+    assert pn_credit(self.snd) == 0
+    assert pn_credit(self.rcv) == 0
+    assert pn_queued(self.rcv) == 0
+
+    pn_flow(self.rcv, 10)
+    self.pump()
+    assert pn_credit(self.snd) == 10
+    assert pn_credit(self.rcv) == 10
+    assert pn_queued(self.rcv) == 0
+
+    pn_drained(self.snd)
+    self.pump()
+    assert pn_credit(self.snd) == 10
+    assert pn_credit(self.rcv) == 10
+    assert pn_queued(self.rcv) == 0
+
+    pn_drain(self.rcv, 0)
+    assert pn_credit(self.snd) == 10
+    assert pn_credit(self.rcv) == 10
+    assert pn_queued(self.rcv) == 0
+
+    self.pump()
+
+    assert pn_credit(self.snd) == 10
+    assert pn_credit(self.rcv) == 10
+    assert pn_queued(self.rcv) == 0
+
+    pn_drained(self.snd)
+    assert pn_credit(self.snd) == 0
+    assert pn_credit(self.rcv) == 10
+    assert pn_queued(self.rcv) == 0
+    self.pump()
+
+    assert pn_credit(self.snd) == 0
+    assert pn_credit(self.rcv) == 0
+    assert pn_queued(self.rcv) == 0
+
 class SettlementTest(Test):
 
   def setup(self):



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

Reply via email to