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