Author: gsim
Date: Fri Oct 10 12:54:35 2014
New Revision: 1630833

URL: http://svn.apache.org/r1630833
Log:
PROTON-688: reset transport state on unbind

Modified:
    qpid/proton/branches/examples/proton-c/src/transport/transport.c

Modified: qpid/proton/branches/examples/proton-c/src/transport/transport.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/transport/transport.c?rev=1630833&r1=1630832&r2=1630833&view=diff
==============================================================================
--- qpid/proton/branches/examples/proton-c/src/transport/transport.c (original)
+++ qpid/proton/branches/examples/proton-c/src/transport/transport.c Fri Oct 10 
12:54:35 2014
@@ -191,12 +191,12 @@ static void pni_map_remote_channel(pn_se
   session->state.remote_channel = channel;
 }
 
-void pni_transport_unbind_handles(pn_hash_t *handles);
+void pni_transport_unbind_handles(pn_hash_t *handles, bool reset_state);
 
 static void pni_unmap_remote_channel(pn_session_t *ssn)
 {
   // XXX: should really update link state also
-  pni_transport_unbind_handles(ssn->state.remote_handles);
+  pni_transport_unbind_handles(ssn->state.remote_handles, false);
   pn_transport_t *transport = ssn->connection->transport;
   uint16_t channel = ssn->state.remote_channel;
   ssn->state.remote_channel = -2;
@@ -287,12 +287,14 @@ int pn_transport_bind(pn_transport_t *tr
   return 0;
 }
 
-void pni_transport_unbind_handles(pn_hash_t *handles)
+void pni_transport_unbind_handles(pn_hash_t *handles, bool reset_state)
 {
   for (pn_handle_t h = pn_hash_head(handles); h; h = pn_hash_next(handles, h)) 
{
     uintptr_t key = pn_hash_key(handles, h);
-    pn_link_t *link = (pn_link_t *) pn_hash_value(handles, h);
-    pn_link_unbound(link);
+    if (reset_state) {
+      pn_link_t *link = (pn_link_t *) pn_hash_value(handles, h);
+      pn_link_unbound(link);
+    }
     pn_hash_del(handles, key);
   }
 }
@@ -302,8 +304,8 @@ void pni_transport_unbind_channels(pn_ha
   for (pn_handle_t h = pn_hash_head(channels); h; h = pn_hash_next(channels, 
h)) {
     uintptr_t key = pn_hash_key(channels, h);
     pn_session_t *ssn = (pn_session_t *) pn_hash_value(channels, h);
-    pni_transport_unbind_handles(ssn->state.local_handles);
-    pni_transport_unbind_handles(ssn->state.remote_handles);
+    pni_transport_unbind_handles(ssn->state.local_handles, true);
+    pni_transport_unbind_handles(ssn->state.remote_handles, true);
     pn_session_unbound(ssn);
     pn_hash_del(channels, key);
   }
@@ -1665,7 +1667,7 @@ bool pn_pointful_buffering(pn_transport_
 
 static void pni_unmap_local_channel(pn_session_t *ssn) {
   // XXX: should really update link state also
-  pni_transport_unbind_handles(ssn->state.local_handles);
+  pni_transport_unbind_handles(ssn->state.local_handles, false);
   pn_transport_t *transport = ssn->connection->transport;
   pn_session_state_t *state = &ssn->state;
   uintptr_t channel = state->local_channel;



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

Reply via email to