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