You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2012/11/02 18:59:22 UTC
svn commit: r1405076 - in /qpid/proton/trunk/proton-c/src/engine:
engine-internal.h engine.c
Author: rhs
Date: Fri Nov 2 17:59:22 2012
New Revision: 1405076
URL: http://svn.apache.org/viewvc?rev=1405076&view=rev
Log:
don't send out invalid initial disp
Modified:
qpid/proton/trunk/proton-c/src/engine/engine-internal.h
qpid/proton/trunk/proton-c/src/engine/engine.c
Modified: qpid/proton/trunk/proton-c/src/engine/engine-internal.h
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/engine/engine-internal.h?rev=1405076&r1=1405075&r2=1405076&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/engine-internal.h (original)
+++ qpid/proton/trunk/proton-c/src/engine/engine-internal.h Fri Nov 2 17:59:22 2012
@@ -88,6 +88,7 @@ typedef struct {
bool disp_type;
pn_sequence_t disp_first;
pn_sequence_t disp_last;
+ bool disp;
} pn_session_state_t;
#define SCRATCH (1024)
Modified: qpid/proton/trunk/proton-c/src/engine/engine.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/engine/engine.c?rev=1405076&r1=1405075&r2=1405076&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/engine.c (original)
+++ qpid/proton/trunk/proton-c/src/engine/engine.c Fri Nov 2 17:59:22 2012
@@ -1994,7 +1994,7 @@ int pn_flush_disp(pn_transport_t *transp
{
uint64_t code = ssn_state->disp_code;
uint64_t settled = ssn_state->disp_settled;
- if (code || settled) {
+ if (ssn_state->disp) {
int err = pn_post_frame(transport->disp, ssn_state->local_channel, "DL[oIIo?DL[]]", DISPOSITION,
ssn_state->disp_type, ssn_state->disp_first, ssn_state->disp_last,
settled, (bool)code, code);
@@ -2004,6 +2004,7 @@ int pn_flush_disp(pn_transport_t *transp
ssn_state->disp_settled = 0;
ssn_state->disp_first = 0;
ssn_state->disp_last = 0;
+ ssn_state->disp = false;
}
return 0;
}
@@ -2031,7 +2032,12 @@ int pn_post_disp(pn_transport_t *transpo
code = 0;
}
- if (code == ssn_state->disp_code && delivery->local_settled == ssn_state->disp_settled &&
+ if (!code && !delivery->local_settled) {
+ return 0;
+ }
+
+ if (ssn_state->disp && code == ssn_state->disp_code &&
+ delivery->local_settled == ssn_state->disp_settled &&
ssn_state->disp_type == (link->endpoint.type == RECEIVER)) {
if (state->id == ssn_state->disp_first - 1) {
ssn_state->disp_first = state->id;
@@ -2042,14 +2048,17 @@ int pn_post_disp(pn_transport_t *transpo
}
}
- int err = pn_flush_disp(transport, ssn_state);
- if (err) return err;
+ if (ssn_state->disp) {
+ int err = pn_flush_disp(transport, ssn_state);
+ if (err) return err;
+ }
ssn_state->disp_type = (link->endpoint.type == RECEIVER);
ssn_state->disp_code = code;
ssn_state->disp_settled = delivery->local_settled;
ssn_state->disp_first = state->id;
ssn_state->disp_last = state->id;
+ ssn_state->disp = true;
return 0;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org