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 2013/11/07 19:53:12 UTC
svn commit: r1539760 - in /qpid/proton/trunk/proton-c/src: engine/engine.c
messenger/messenger.c
Author: rhs
Date: Thu Nov 7 18:53:12 2013
New Revision: 1539760
URL: http://svn.apache.org/r1539760
Log:
fixed bug in link error reporting/recovery
Modified:
qpid/proton/trunk/proton-c/src/engine/engine.c
qpid/proton/trunk/proton-c/src/messenger/messenger.c
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=1539760&r1=1539759&r2=1539760&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/engine.c (original)
+++ qpid/proton/trunk/proton-c/src/engine/engine.c Thu Nov 7 18:53:12 2013
@@ -169,7 +169,6 @@ void pn_add_link(pn_session_t *ssn, pn_l
void pn_remove_link(pn_session_t *ssn, pn_link_t *link)
{
- link->session = NULL;
pn_list_remove(ssn->links, link);
}
Modified: qpid/proton/trunk/proton-c/src/messenger/messenger.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/messenger/messenger.c?rev=1539760&r1=1539759&r2=1539760&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/messenger/messenger.c (original)
+++ qpid/proton/trunk/proton-c/src/messenger/messenger.c Thu Nov 7 18:53:12 2013
@@ -664,6 +664,29 @@ int pni_pump_in(pn_messenger_t *messenge
return 0;
}
+void pni_messenger_reclaim_link(pn_messenger_t *messenger, pn_link_t *link)
+{
+ if (pn_link_is_receiver(link) && pn_link_credit(link) > 0) {
+ int credit = pn_link_credit(link);
+ messenger->credit += credit;
+ messenger->distributed -= credit;
+ }
+
+ pn_delivery_t *d = pn_unsettled_head(link);
+ while (d) {
+ pni_entry_t *e = (pni_entry_t *) pn_delivery_get_context(d);
+ if (e) {
+ pni_entry_set_delivery(e, NULL);
+ if (pn_delivery_buffered(d)) {
+ pni_entry_set_status(e, PN_STATUS_ABORTED);
+ }
+ }
+ d = pn_unsettled_next(d);
+ }
+
+ link_ctx_release(messenger, link);
+}
+
int pni_pump_out(pn_messenger_t *messenger, const char *address, pn_link_t *sender);
void pn_messenger_endpoints(pn_messenger_t *messenger, pn_connection_t *conn, pn_connector_t *ctor)
@@ -733,11 +756,10 @@ void pn_messenger_endpoints(pn_messenger
link = pn_link_head(conn, PN_REMOTE_CLOSED);
while (link) {
- if (PN_LOCAL_ACTIVE | pn_link_state(link)) {
+ if (PN_LOCAL_ACTIVE & pn_link_state(link)) {
pn_condition_report("LINK", pn_link_remote_condition(link));
pn_link_close(link);
- } else {
- link_ctx_release( messenger, link );
+ pni_messenger_reclaim_link(messenger, link);
pn_link_free(link);
}
link = pn_link_next(link, PN_REMOTE_CLOSED);
@@ -774,26 +796,7 @@ void pni_messenger_reclaim(pn_messenger_
pn_link_t *link = pn_link_head(conn, 0);
while (link) {
- if (pn_link_is_receiver(link) && pn_link_credit(link) > 0) {
- int credit = pn_link_credit(link);
- messenger->credit += credit;
- messenger->distributed -= credit;
- }
-
- pn_delivery_t *d = pn_unsettled_head(link);
- while (d) {
- pni_entry_t *e = (pni_entry_t *) pn_delivery_get_context(d);
- if (e) {
- pni_entry_set_delivery(e, NULL);
- if (pn_delivery_buffered(d)) {
- pni_entry_set_status(e, PN_STATUS_ABORTED);
- }
- }
- d = pn_unsettled_next(d);
- }
-
- link_ctx_release(messenger, link);
-
+ pni_messenger_reclaim_link(messenger, link);
link = pn_link_next(link, 0);
}
@@ -801,7 +804,6 @@ void pni_messenger_reclaim(pn_messenger_
pn_connection_free(conn);
}
-
pn_connection_t *pn_messenger_connection(pn_messenger_t *messenger,
pn_connector_t *connector,
const char *scheme,
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org