You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kg...@apache.org on 2020/07/06 16:57:08 UTC

[qpid-dispatch] branch master updated: DISPATCH-1657: DISPATCH-1545: check for un-initialized router connection masks

This is an automated email from the ASF dual-hosted git repository.

kgiusti pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git


The following commit(s) were added to refs/heads/master by this push:
     new 096f354  DISPATCH-1657: DISPATCH-1545: check for un-initialized router connection masks
096f354 is described below

commit 096f35490099b64e9d0d53d0407c2e99e89526ec
Author: Kenneth Giusti <kg...@apache.org>
AuthorDate: Thu Jun 11 14:27:06 2020 -0400

    DISPATCH-1657: DISPATCH-1545: check for un-initialized router connection masks
    
    There can be a delay between when a new remote router is discovered
    and the connection over which that router is accessed is identified.
    If a message is forwarded before this process completes the connection
    lookup fails.  The patch checks if the failure occurs and avoids
    forwarding the message.
---
 src/router_core/forwarder.c | 34 ++++++++++++++++++----------------
 1 file changed, 18 insertions(+), 16 deletions(-)

diff --git a/src/router_core/forwarder.c b/src/router_core/forwarder.c
index f6ee7bc..5f7a517 100644
--- a/src/router_core/forwarder.c
+++ b/src/router_core/forwarder.c
@@ -660,23 +660,25 @@ int qdr_forward_closest_CT(qdr_core_t      *core,
                 qd_bitmask_first_set(addr->closest_remotes, &addr->next_remote);
 
             // get the inter-router connection associated with path to rnode:
-            int conn_bit = (rnode->next_hop) ? rnode->next_hop->conn_mask_bit : rnode->conn_mask_bit;
-            qdr_link_t *out_link;
-            if (control) {
-                out_link = peer_router_control_link(core, conn_bit);
-            } else if (!receive_complete) {
-                out_link = get_outgoing_streaming_link(core, core->rnode_conns_by_mask_bit[conn_bit]);
-            } else {
-                out_link = peer_router_data_link(core, conn_bit, qdr_forward_effective_priority(msg, addr));
-            }
+            const int conn_bit = (rnode->next_hop) ? rnode->next_hop->conn_mask_bit : rnode->conn_mask_bit;
+            if (conn_bit >= 0) {
+                qdr_link_t *out_link;
+                if (control) {
+                    out_link = peer_router_control_link(core, conn_bit);
+                } else if (!receive_complete) {
+                    out_link = get_outgoing_streaming_link(core, core->rnode_conns_by_mask_bit[conn_bit]);
+                } else {
+                    out_link = peer_router_data_link(core, conn_bit, qdr_forward_effective_priority(msg, addr));
+                }
 
-            if (out_link) {
-                qdr_delivery_t *out_delivery = qdr_forward_new_delivery_CT(core, in_delivery, out_link, msg);
-                qdr_forward_deliver_CT(core, out_link, out_delivery);
-                addr->deliveries_transit++;
-                if (out_link->link_type == QD_LINK_ROUTER)
-                    core->deliveries_transit++;
-                return 1;
+                if (out_link) {
+                    qdr_delivery_t *out_delivery = qdr_forward_new_delivery_CT(core, in_delivery, out_link, msg);
+                    qdr_forward_deliver_CT(core, out_link, out_delivery);
+                    addr->deliveries_transit++;
+                    if (out_link->link_type == QD_LINK_ROUTER)
+                        core->deliveries_transit++;
+                    return 1;
+                }
             }
         }
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org