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