Author: gsim
Date: Wed Sep 17 14:07:38 2014
New Revision: 1625597

URL: http://svn.apache.org/r1625597
Log:
Reset transport state on unbind

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

Modified: qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h?rev=1625597&r1=1625596&r2=1625597&view=diff
==============================================================================
--- qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h 
(original)
+++ qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h Wed Sep 
17 14:07:38 2014
@@ -311,5 +311,7 @@ void pn_work_update(pn_connection_t *con
 void pn_clear_modified(pn_connection_t *connection, pn_endpoint_t *endpoint);
 void pn_connection_unbound(pn_connection_t *conn);
 int pn_do_error(pn_transport_t *transport, const char *condition, const char 
*fmt, ...);
+void pn_session_unbound(pn_session_t* ssn);
+void pn_link_unbound(pn_link_t* link);
 
 #endif /* engine-internal.h */

Modified: qpid/proton/branches/examples/proton-c/src/engine/engine.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/engine/engine.c?rev=1625597&r1=1625596&r2=1625597&view=diff
==============================================================================
--- qpid/proton/branches/examples/proton-c/src/engine/engine.c (original)
+++ qpid/proton/branches/examples/proton-c/src/engine/engine.c Wed Sep 17 
14:07:38 2014
@@ -754,6 +754,17 @@ pn_session_t *pn_session(pn_connection_t
   return ssn;
 }
 
+void pn_session_unbound(pn_session_t* ssn)
+{
+  assert(ssn);
+  ssn->state.local_channel = (uint16_t)-1;
+  ssn->state.remote_channel = (uint16_t)-1;
+  ssn->incoming_bytes = 0;
+  ssn->outgoing_bytes = 0;
+  ssn->incoming_deliveries = 0;
+  ssn->outgoing_deliveries = 0;
+}
+
 size_t pn_session_get_incoming_capacity(pn_session_t *ssn)
 {
   assert(ssn);
@@ -870,6 +881,15 @@ pn_link_t *pn_link_new(int type, pn_sess
   return link;
 }
 
+void pn_link_unbound(pn_link_t* link)
+{
+  assert(link);
+  link->state.local_handle = -1;
+  link->state.remote_handle = -1;
+  link->state.delivery_count = 0;
+  link->state.link_credit = 0;
+}
+
 pn_terminus_t *pn_link_source(pn_link_t *link)
 {
   return link ? &link->source : NULL;

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=1625597&r1=1625596&r2=1625597&view=diff
==============================================================================
--- qpid/proton/branches/examples/proton-c/src/transport/transport.c (original)
+++ qpid/proton/branches/examples/proton-c/src/transport/transport.c Wed Sep 17 
14:07:38 2014
@@ -91,6 +91,7 @@ void pn_delivery_map_clear(pn_delivery_m
     pn_delivery_t *dlv = (pn_delivery_t *) pn_hash_value(hash, entry);
     pn_delivery_map_del(dm, dlv);
   }
+  dm->next = 0;
 }
 
 static ssize_t pn_input_read_amqp_header(pn_io_layer_t *io_layer, const char 
*bytes, size_t available);
@@ -276,6 +277,8 @@ void pni_transport_unbind_handles(pn_has
 {
   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);
     pn_hash_del(handles, key);
   }
 }
@@ -287,6 +290,7 @@ void pni_transport_unbind_channels(pn_ha
     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);
+    pn_session_unbound(ssn);
     pn_hash_del(channels, key);
   }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to