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]