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