Repository: qpid-dispatch Updated Branches: refs/heads/master 99d0377f0 -> a357dfa3e
DISPATCH-1141 - Consolidated address to link/connection binding, wired in the core address events Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/a357dfa3 Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/a357dfa3 Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/a357dfa3 Branch: refs/heads/master Commit: a357dfa3ef0aaf01a7e88d96e443ff68b00355d2 Parents: 99d0377 Author: Ted Ross <[email protected]> Authored: Fri Oct 12 16:58:29 2018 -0400 Committer: Ted Ross <[email protected]> Committed: Fri Oct 12 16:58:29 2018 -0400 ---------------------------------------------------------------------- src/router_core/connections.c | 84 ++++++-------------- src/router_core/exchange_bindings.c | 6 +- src/router_core/module.h | 2 +- .../modules/edge_router/addr_proxy.c | 23 +++++- src/router_core/route_control.c | 27 ++----- src/router_core/route_tables.c | 20 ++++- src/router_core/router_core.c | 56 +++++++++++++ src/router_core/router_core_private.h | 6 +- src/router_core/transfer.c | 4 +- 9 files changed, 132 insertions(+), 96 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a357dfa3/src/router_core/connections.c ---------------------------------------------------------------------- diff --git a/src/router_core/connections.c b/src/router_core/connections.c index 041e0f0..c08da13 100644 --- a/src/router_core/connections.c +++ b/src/router_core/connections.c @@ -749,7 +749,7 @@ static void qdr_link_cleanup_deliveries_CT(qdr_core_t *core, qdr_connection_t *c dlv->tracking_addr->tracked_deliveries--; if (dlv->tracking_addr->tracked_deliveries == 0) - qdr_check_addr_CT(core, dlv->tracking_addr, false); + qdr_check_addr_CT(core, dlv->tracking_addr); dlv->tracking_addr = 0; } @@ -1077,29 +1077,23 @@ qd_address_treatment_t qdr_treatment_for_address_hash_CT(qdr_core_t *core, qd_it * Depending on its policy, the address may be eligible for being closed out * (i.e. Logging its terminal statistics and freeing its resources). */ -void qdr_check_addr_CT(qdr_core_t *core, qdr_address_t *addr, bool was_local) +void qdr_check_addr_CT(qdr_core_t *core, qdr_address_t *addr) { if (addr == 0) return; // - // If we have just removed a local linkage and it was the last local linkage, - // we need to notify the router module that there is no longer a local - // presence of this address. - // - if (was_local && DEQ_SIZE(addr->rlinks) == 0) { - const char *key = (const char*) qd_hash_key_by_handle(addr->hash_handle); - if (key && (*key == QD_ITER_HASH_PREFIX_MOBILE || *key == QD_ITER_HASH_PREFIX_EDGE_SUMMARY)) - qdr_post_mobile_removed_CT(core, key); - } - - // // If the address has no in-process consumer or destinations, it should be // deleted. // - if (DEQ_SIZE(addr->subscriptions) == 0 && DEQ_SIZE(addr->rlinks) == 0 && DEQ_SIZE(addr->inlinks) == 0 && - qd_bitmask_cardinality(addr->rnodes) == 0 && addr->ref_count == 0 && !addr->block_deletion && - addr->tracked_deliveries == 0 && addr->core_endpoint == 0) { + if (DEQ_SIZE(addr->subscriptions) == 0 + && DEQ_SIZE(addr->rlinks) == 0 + && DEQ_SIZE(addr->inlinks) == 0 + && qd_bitmask_cardinality(addr->rnodes) == 0 + && addr->ref_count == 0 + && !addr->block_deletion + && addr->tracked_deliveries == 0 + && addr->core_endpoint == 0) { qdr_core_remove_address(core, addr); } } @@ -1501,14 +1495,7 @@ static void qdr_attach_link_downlink_CT(qdr_core_t *core, qdr_connection_t *conn DEQ_INSERT_TAIL(core->addrs, addr); } - qdr_add_link_ref(&addr->rlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); - link->owning_addr = addr; - if (DEQ_SIZE(addr->rlinks) == 1) { - const char *key = (const char*) qd_hash_key_by_handle(addr->hash_handle); - if (key && *key == QD_ITER_HASH_PREFIX_EDGE_SUMMARY) - qdr_post_mobile_added_CT(core, key); - qdr_addr_start_inlinks_CT(core, addr); - } + qdr_core_bind_address_link_CT(core, addr, link); qd_iterator_free(iter); } @@ -1632,14 +1619,12 @@ static void qdr_link_inbound_first_attach_CT(qdr_core_t *core, qdr_action_t *act // Now, send back a detach with the error amqp:precondition-failed qdr_link_outbound_detach_CT(core, link, 0, QDR_CONDITION_COORDINATOR_PRECONDITION_FAILED, true); } - else - { + else { // // Associate the link with the address. With this association, it will be unnecessary // to do an address lookup for deliveries that arrive on this link. // - link->owning_addr = addr; - qdr_add_link_ref(&addr->inlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); + qdr_core_bind_address_link_CT(core, addr, link); qdr_link_outbound_second_attach_CT(core, link, source, target); // @@ -1722,17 +1707,7 @@ static void qdr_link_inbound_first_attach_CT(qdr_core_t *core, qdr_action_t *act } else { - // - // Associate the link with the address. - // - link->owning_addr = addr; - qdr_add_link_ref(&addr->rlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); - if (DEQ_SIZE(addr->rlinks) == 1) { - const char *key = (const char*) qd_hash_key_by_handle(addr->hash_handle); - if (key && *key == QD_ITER_HASH_PREFIX_MOBILE) - qdr_post_mobile_added_CT(core, key); - qdr_addr_start_inlinks_CT(core, addr); - } + qdr_core_bind_address_link_CT(core, addr, link); qdr_link_outbound_second_attach_CT(core, link, source, target); } break; @@ -1803,8 +1778,7 @@ static void qdr_link_inbound_second_attach_CT(qdr_core_t *core, qdr_action_t *ac // if (qdr_terminus_get_address(source)) { link->auto_link->state = QDR_AUTO_LINK_STATE_ACTIVE; - qdr_add_link_ref(&link->auto_link->addr->inlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); - link->owning_addr = link->auto_link->addr; + qdr_core_bind_address_link_CT(core, link->auto_link->addr, link); } } @@ -1837,14 +1811,7 @@ static void qdr_link_inbound_second_attach_CT(qdr_core_t *core, qdr_action_t *ac // if (qdr_terminus_get_address(target)) { link->auto_link->state = QDR_AUTO_LINK_STATE_ACTIVE; - qdr_add_link_ref(&link->auto_link->addr->rlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); - link->owning_addr = link->auto_link->addr; - if (DEQ_SIZE(link->auto_link->addr->rlinks) == 1) { - const char *key = (const char*) qd_hash_key_by_handle(link->auto_link->addr->hash_handle); - if (key && *key == QD_ITER_HASH_PREFIX_MOBILE) - qdr_post_mobile_added_CT(core, key); - qdr_addr_start_inlinks_CT(core, link->auto_link->addr); - } + qdr_core_bind_address_link_CT(core, link->auto_link->addr, link); } } break; @@ -1872,12 +1839,11 @@ static void qdr_link_inbound_detach_CT(qdr_core_t *core, qdr_action_t *action, b if (discard) return; - qdr_connection_t *conn = action->args.connection.conn; - qdr_link_t *link = action->args.connection.link; - qdr_error_t *error = action->args.connection.error; - qd_detach_type_t dt = action->args.connection.dt; - qdr_address_t *addr = link->owning_addr; - bool was_local = false; + qdr_connection_t *conn = action->args.connection.conn; + qdr_link_t *link = action->args.connection.link; + qdr_error_t *error = action->args.connection.error; + qd_detach_type_t dt = action->args.connection.dt; + qdr_address_t *addr = link->owning_addr; // // Bump the detach count to track half and full detaches @@ -1970,10 +1936,8 @@ static void qdr_link_inbound_detach_CT(qdr_core_t *core, qdr_action_t *action, b switch (link->link_type) { case QD_LINK_ENDPOINT: case QD_LINK_EDGE_DOWNLINK: - if (addr) { - qdr_del_link_ref(&addr->rlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); - was_local = true; - } + if (addr) + qdr_core_unbind_address_link_CT(core, addr, link); break; case QD_LINK_CONTROL: @@ -2010,7 +1974,7 @@ static void qdr_link_inbound_detach_CT(qdr_core_t *core, qdr_action_t *action, b // cleanup has to be done. // if (addr) - qdr_check_addr_CT(core, addr, was_local); + qdr_check_addr_CT(core, addr); if (error) qdr_error_free(error); http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a357dfa3/src/router_core/exchange_bindings.c ---------------------------------------------------------------------- diff --git a/src/router_core/exchange_bindings.c b/src/router_core/exchange_bindings.c index 215c68a..43a5ca4 100644 --- a/src/router_core/exchange_bindings.c +++ b/src/router_core/exchange_bindings.c @@ -955,8 +955,7 @@ static void qdr_exchange_free(qdr_exchange_t *ex) ex->qdr_addr->forwarder = ex->old_forwarder; assert(ex->qdr_addr->ref_count > 0); ex->qdr_addr->ref_count -= 1; - qdr_check_addr_CT(ex->core, ex->qdr_addr, false); // @TODO(kgiusti) ?is - // false correct ? + qdr_check_addr_CT(ex->core, ex->qdr_addr); free(ex->name); free(ex->address); @@ -1066,8 +1065,7 @@ static void next_hop_release(next_hop_t *nh) if (--nh->ref_count == 0) { assert(nh->qdr_addr->ref_count > 0); if (--nh->qdr_addr->ref_count == 0) { - // @TODO(kgiusti) is 'false' ok? - qdr_check_addr_CT(nh->exchange->core, nh->qdr_addr, false); + qdr_check_addr_CT(nh->exchange->core, nh->qdr_addr); } DEQ_REMOVE_N(exchange_list, nh->exchange->next_hops, nh); assert(!nh->on_xmit_list); http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a357dfa3/src/router_core/module.h ---------------------------------------------------------------------- diff --git a/src/router_core/module.h b/src/router_core/module.h index d2f44c7..e330146 100644 --- a/src/router_core/module.h +++ b/src/router_core/module.h @@ -31,7 +31,7 @@ typedef void (*qdrc_module_init_t) (qdr_core_t *core, void **module_context); /** - * Callback to finailize a core module at core thread shutdown + * Callback to finalize a core module at core thread shutdown * * @param module_context The context returned by the module during the on_init call */ http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a357dfa3/src/router_core/modules/edge_router/addr_proxy.c ---------------------------------------------------------------------- diff --git a/src/router_core/modules/edge_router/addr_proxy.c b/src/router_core/modules/edge_router/addr_proxy.c index a71f304..d5dc237 100644 --- a/src/router_core/modules/edge_router/addr_proxy.c +++ b/src/router_core/modules/edge_router/addr_proxy.c @@ -76,8 +76,7 @@ static void on_conn_event(void *context, qdrc_event_t event, qdr_connection_t *c // Associate the anonymous sender with the uplink address. This will cause // all deliveries destined off-edge to be sent to the interior via the uplink. // - qdr_add_link_ref(&ap->uplink_addr->rlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); - link->owning_addr = ap->uplink_addr; + qdr_core_bind_address_link_CT(ap->core, ap->uplink_addr, link); // // Attach a receiving link for edge summary. This will cause all deliveries @@ -87,6 +86,11 @@ static void on_conn_event(void *context, qdrc_event_t event, qdr_connection_t *c QD_LINK_ENDPOINT, QD_INCOMING, qdr_terminus_edge_downlink(ap->core->router_id), qdr_terminus_edge_downlink(0)); + + // + // TODO - Process eligible local destinations + // + break; } @@ -103,7 +107,20 @@ static void on_conn_event(void *context, qdrc_event_t event, qdr_connection_t *c static void on_addr_event(void *context, qdrc_event_t event, qdr_address_t *addr) { - //qcm_edge_addr_proxy_t *ap = (qcm_edge_addr_proxy_t*) context; + qcm_edge_addr_proxy_t *ap = (qcm_edge_addr_proxy_t*) context; + + // + // If we don't have an established uplink, there is no further work to be done. + // + if (!ap->uplink_established) + return; + + // + // If the address is not in the Mobile class, no further processing is needed. + // + const char *key = (const char*) qd_hash_key_by_handle(addr->hash_handle); + if (*key != QD_ITER_HASH_PREFIX_MOBILE) + return; switch (event) { case QDRC_EVENT_ADDR_BECAME_LOCAL_DEST : http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a357dfa3/src/router_core/route_control.c ---------------------------------------------------------------------- diff --git a/src/router_core/route_control.c b/src/router_core/route_control.c index 39771cd..977ac5f 100644 --- a/src/router_core/route_control.c +++ b/src/router_core/route_control.c @@ -188,22 +188,14 @@ static char *qdr_address_to_link_route_pattern(qd_iterator_t *addr_hash, static void qdr_link_route_activate_CT(qdr_core_t *core, qdr_link_route_t *lr, qdr_connection_t *conn) { - char *address; qdr_route_log_CT(core, "Link Route Activated", lr->name, lr->identity, conn); // // Activate the address for link-routed destinations. If this is the first // activation for this address, notify the router module of the added address. // - if (lr->addr) { - qdr_add_connection_ref(&lr->addr->conns, conn); - if (DEQ_SIZE(lr->addr->conns) == 1) { - address = qdr_link_route_pattern_to_address(lr->pattern, lr->dir); - qd_log(core->log, QD_LOG_TRACE, "Activating link route pattern [%s]", address); - qdr_post_mobile_added_CT(core, address); - free(address); - } - } + if (lr->addr) + qdr_core_bind_address_conn_CT(core, lr->addr, conn); lr->active = true; } @@ -216,15 +208,8 @@ static void qdr_link_route_deactivate_CT(qdr_core_t *core, qdr_link_route_t *lr, // // Deactivate the address(es) for link-routed destinations. // - if (lr->addr) { - qdr_del_connection_ref(&lr->addr->conns, conn); - if (DEQ_IS_EMPTY(lr->addr->conns)) { - char *address = qdr_link_route_pattern_to_address(lr->pattern, lr->dir); - qd_log(core->log, QD_LOG_TRACE, "Deactivating link route pattern [%s]", address); - qdr_post_mobile_removed_CT(core, address); - free(address); - } - } + if (lr->addr) + qdr_core_unbind_address_conn_CT(core, lr->addr, conn); lr->active = false; } @@ -445,7 +430,7 @@ void qdr_route_del_link_route_CT(qdr_core_t *core, qdr_link_route_t *lr) // qdr_address_t *addr = lr->addr; if (addr && --addr->ref_count == 0) - qdr_check_addr_CT(core, addr, false); + qdr_check_addr_CT(core, addr); // // Remove the link route from the core list. @@ -545,7 +530,7 @@ void qdr_route_del_auto_link_CT(qdr_core_t *core, qdr_auto_link_t *al) // qdr_address_t *addr = al->addr; if (addr && --addr->ref_count == 0) - qdr_check_addr_CT(core, addr, false); + qdr_check_addr_CT(core, addr); // // Remove the auto link from the core list. http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a357dfa3/src/router_core/route_tables.c ---------------------------------------------------------------------- diff --git a/src/router_core/route_tables.c b/src/router_core/route_tables.c index f9bb1f6..84834fe 100644 --- a/src/router_core/route_tables.c +++ b/src/router_core/route_tables.c @@ -400,7 +400,7 @@ static void qdr_del_router_CT(qdr_core_t *core, qdr_action_t *action, bool disca // Check the address and free it if there are no other interested parties tracking it // oaddr->block_deletion = false; - qdr_check_addr_CT(core, oaddr, false); + qdr_check_addr_CT(core, oaddr); } @@ -604,6 +604,14 @@ static void qdr_map_destination_CT(qdr_core_t *core, qdr_action_t *action, bool rnode->ref_count++; addr->cost_epoch--; qdr_addr_start_inlinks_CT(core, addr); + + // + // Raise an address event if this is the first destination for the address + // + if (qd_bitmask_cardinality(addr->rnodes) + DEQ_SIZE(addr->rlinks) == 1) + qdrc_event_addr_raise(core, QDRC_EVENT_ADDR_BECAME_DEST, addr); + else if (qd_bitmask_cardinality(addr->rnodes) == 1 && DEQ_SIZE(addr->rlinks) == 1) + qdrc_event_addr_raise(core, QDRC_EVENT_ADDR_TWO_DEST, addr); } while (false); qdr_field_free(address); @@ -646,10 +654,14 @@ static void qdr_unmap_destination_CT(qdr_core_t *core, qdr_action_t *action, boo addr->cost_epoch--; // - // TODO - If this affects a waypoint, create the proper side effects + // Raise an address event if this was the last destination for the address // + if (qd_bitmask_cardinality(addr->rnodes) + DEQ_SIZE(addr->rlinks) == 0) + qdrc_event_addr_raise(core, QDRC_EVENT_ADDR_NO_LONGER_DEST, addr); + else if (qd_bitmask_cardinality(addr->rnodes) == 0 && DEQ_SIZE(addr->rlinks) == 1) + qdrc_event_addr_raise(core, QDRC_EVENT_ADDR_ONE_LOCAL_DEST, addr); - qdr_check_addr_CT(core, addr, false); + qdr_check_addr_CT(core, addr); } while (false); qdr_field_free(address); @@ -704,7 +716,7 @@ static void qdr_unsubscribe_CT(qdr_core_t *core, qdr_action_t *action, bool disc if (!discard) { DEQ_REMOVE(sub->addr->subscriptions, sub); sub->addr = 0; - qdr_check_addr_CT(sub->core, sub->addr, false); + qdr_check_addr_CT(sub->core, sub->addr); } free(sub); http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a357dfa3/src/router_core/router_core.c ---------------------------------------------------------------------- diff --git a/src/router_core/router_core.c b/src/router_core/router_core.c index aa5d715..f7ddb5b 100644 --- a/src/router_core/router_core.c +++ b/src/router_core/router_core.c @@ -20,6 +20,7 @@ #include "router_core_private.h" #include "route_control.h" #include "exchange_bindings.h" +#include "core_events.h" #include <stdio.h> #include <strings.h> @@ -406,6 +407,61 @@ void qdr_core_remove_address(qdr_core_t *core, qdr_address_t *addr) free_qdr_address_t(addr); } + +void qdr_core_bind_address_link_CT(qdr_core_t *core, qdr_address_t *addr, qdr_link_t *link) +{ + link->owning_addr = addr; + + if (link->link_direction == QD_OUTGOING) { + qdr_add_link_ref(&addr->rlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); + if (DEQ_SIZE(addr->rlinks) == 1) { + const char *key = (const char*) qd_hash_key_by_handle(addr->hash_handle); + if (key && (*key == QD_ITER_HASH_PREFIX_EDGE_SUMMARY || *key == QD_ITER_HASH_PREFIX_MOBILE)) + qdr_post_mobile_added_CT(core, key); + qdr_addr_start_inlinks_CT(core, addr); + qdrc_event_addr_raise(core, QDRC_EVENT_ADDR_BECAME_LOCAL_DEST, addr); + } else if (DEQ_SIZE(addr->rlinks) == 2 && qd_bitmask_cardinality(addr->rnodes) == 0) + qdrc_event_addr_raise(core, QDRC_EVENT_ADDR_TWO_DEST, addr); + } else // link->link_direction == QD_INCOMING + qdr_add_link_ref(&addr->inlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); +} + + +void qdr_core_unbind_address_link_CT(qdr_core_t *core, qdr_address_t *addr, qdr_link_t *link) +{ + qdr_del_link_ref(&addr->rlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); + link->owning_addr = 0; + + if (DEQ_SIZE(addr->rlinks) == 0) { + const char *key = (const char*) qd_hash_key_by_handle(addr->hash_handle); + if (key && (*key == QD_ITER_HASH_PREFIX_MOBILE || *key == QD_ITER_HASH_PREFIX_EDGE_SUMMARY)) + qdr_post_mobile_removed_CT(core, key); + qdrc_event_addr_raise(core, QDRC_EVENT_ADDR_NO_LONGER_LOCAL_DEST, addr); + } else if (DEQ_SIZE(addr->rlinks) == 1 && qd_bitmask_cardinality(addr->rnodes) == 0) + qdrc_event_addr_raise(core, QDRC_EVENT_ADDR_ONE_LOCAL_DEST, addr); +} + + +void qdr_core_bind_address_conn_CT(qdr_core_t *core, qdr_address_t *addr, qdr_connection_t *conn) +{ + qdr_add_connection_ref(&addr->conns, conn); + if (DEQ_SIZE(addr->conns) == 1) { + const char *key = (const char*) qd_hash_key_by_handle(addr->hash_handle); + qdr_post_mobile_added_CT(core, key); + } +} + + +void qdr_core_unbind_address_conn_CT(qdr_core_t *core, qdr_address_t *addr, qdr_connection_t *conn) +{ + qdr_del_connection_ref(&addr->conns, conn); + if (DEQ_IS_EMPTY(addr->conns)) { + const char *key = (const char*) qd_hash_key_by_handle(addr->hash_handle); + qdr_post_mobile_removed_CT(core, key); + } +} + + void qdr_core_remove_address_config(qdr_core_t *core, qdr_address_config_t *addr) { qd_iterator_t *pattern = qd_iterator_string(addr->pattern, ITER_VIEW_ALL); http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a357dfa3/src/router_core/router_core_private.h ---------------------------------------------------------------------- diff --git a/src/router_core/router_core_private.h b/src/router_core/router_core_private.h index d1ea32a..c027dc4 100644 --- a/src/router_core/router_core_private.h +++ b/src/router_core/router_core_private.h @@ -528,6 +528,10 @@ qdr_address_t *qdr_address_CT(qdr_core_t *core, qd_address_treatment_t treatment qdr_address_t *qdr_add_local_address_CT(qdr_core_t *core, char aclass, const char *addr, qd_address_treatment_t treatment); qdr_address_t *qdr_add_mobile_address_CT(qdr_core_t *core, const char* prefix, const char *addr, qd_address_treatment_t treatment, bool edge); void qdr_core_remove_address(qdr_core_t *core, qdr_address_t *addr); +void qdr_core_bind_address_link_CT(qdr_core_t *core, qdr_address_t *addr, qdr_link_t *link); +void qdr_core_unbind_address_link_CT(qdr_core_t *core, qdr_address_t *addr, qdr_link_t *link); +void qdr_core_bind_address_conn_CT(qdr_core_t *core, qdr_address_t *addr, qdr_connection_t *conn); +void qdr_core_unbind_address_conn_CT(qdr_core_t *core, qdr_address_t *addr, qdr_connection_t *conn); struct qdr_address_config_t { DEQ_LINKS(qdr_address_config_t); @@ -865,7 +869,7 @@ void qdr_post_mobile_removed_CT(qdr_core_t *core, const char *address_hash); void qdr_post_link_lost_CT(qdr_core_t *core, int link_maskbit); void qdr_post_general_work_CT(qdr_core_t *core, qdr_general_work_t *work); -void qdr_check_addr_CT(qdr_core_t *core, qdr_address_t *addr, bool was_local); +void qdr_check_addr_CT(qdr_core_t *core, qdr_address_t *addr); bool qdr_is_addr_treatment_multicast(qdr_address_t *addr); qdr_delivery_t *qdr_forward_new_delivery_CT(qdr_core_t *core, qdr_delivery_t *peer, qdr_link_t *link, qd_message_t *msg); void qdr_forward_deliver_CT(qdr_core_t *core, qdr_link_t *link, qdr_delivery_t *dlv); http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a357dfa3/src/router_core/transfer.c ---------------------------------------------------------------------- diff --git a/src/router_core/transfer.c b/src/router_core/transfer.c index 361e2e1..b011f5f 100644 --- a/src/router_core/transfer.c +++ b/src/router_core/transfer.c @@ -498,7 +498,7 @@ bool qdr_delivery_settled_CT(qdr_core_t *core, qdr_delivery_t *dlv) dlv->tracking_addr->tracked_deliveries--; if (dlv->tracking_addr->tracked_deliveries == 0) - qdr_check_addr_CT(core, dlv->tracking_addr, false); + qdr_check_addr_CT(core, dlv->tracking_addr); dlv->tracking_addr = 0; } @@ -542,7 +542,7 @@ static void qdr_delete_delivery_internal_CT(qdr_core_t *core, qdr_delivery_t *de delivery->tracking_addr->tracked_deliveries--; if (delivery->tracking_addr->tracked_deliveries == 0) - qdr_check_addr_CT(core, delivery->tracking_addr, false); + qdr_check_addr_CT(core, delivery->tracking_addr); delivery->tracking_addr = 0; } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
