This is an automated email from the ASF dual-hosted git repository. tross 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 2d42c9c DISPATCH-1362 - Remove recursive call to qdr_check_addr_CT during core shutdown. This removes a window of opportunity for an invalid free during shutdown. This closes #519 2d42c9c is described below commit 2d42c9c645934332f1e5262fa4fa1a1cf9a30a37 Author: Ted Ross <tr...@redhat.com> AuthorDate: Mon Jun 10 16:05:37 2019 -0400 DISPATCH-1362 - Remove recursive call to qdr_check_addr_CT during core shutdown. This removes a window of opportunity for an invalid free during shutdown. This closes #519 --- src/router_core/connections.c | 8 ++++++++ src/router_core/router_core.c | 9 ++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/router_core/connections.c b/src/router_core/connections.c index 01f4175..e62e609 100644 --- a/src/router_core/connections.c +++ b/src/router_core/connections.c @@ -1173,7 +1173,15 @@ void qdr_check_addr_CT(qdr_core_t *core, qdr_address_t *addr) && addr->tracked_deliveries == 0 && addr->core_endpoint == 0 && addr->fallback_for == 0) { + qdr_address_t *fallback = addr->fallback; qdr_core_remove_address(core, addr); + + // + // If the address being removed had a fallback address, check to see if that + // address should now also be removed. + // + if (!!fallback) + qdr_check_addr_CT(core, fallback); } } diff --git a/src/router_core/router_core.c b/src/router_core/router_core.c index aaab696..67c145e 100644 --- a/src/router_core/router_core.c +++ b/src/router_core/router_core.c @@ -519,10 +519,13 @@ void qdr_core_remove_address(qdr_core_t *core, qdr_address_t *addr) cr = DEQ_HEAD(addr->conns); } - if (!!addr->fallback) { + // + // If there are any fallback-related linkages, disconnect them. + // + if (!!addr->fallback) addr->fallback->fallback_for = 0; - qdr_check_addr_CT(core, addr->fallback); - } + if (!!addr->fallback_for) + addr->fallback_for->fallback = 0; free(addr->add_prefix); free(addr->del_prefix); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org