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]