Repository: qpid-dispatch Updated Branches: refs/heads/master 1f1089b10 -> 2def0a9b4
DISPATCH-759: Move freeing message and iterator out of core thread Some of delivery deletion requires core context and that part stays. Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/2def0a9b Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/2def0a9b Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/2def0a9b Branch: refs/heads/master Commit: 2def0a9b444288cc1c87f80b6b80e64bd59f478c Parents: 1f1089b Author: Chuck Rolke <cro...@redhat.com> Authored: Sat Jul 8 10:25:24 2017 -0400 Committer: Chuck Rolke <cro...@redhat.com> Committed: Mon Jul 10 16:17:23 2017 -0400 ---------------------------------------------------------------------- src/router_core/transfer.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/2def0a9b/src/router_core/transfer.c ---------------------------------------------------------------------- diff --git a/src/router_core/transfer.c b/src/router_core/transfer.c index 5ae67c8..66b9687 100644 --- a/src/router_core/transfer.c +++ b/src/router_core/transfer.c @@ -374,15 +374,25 @@ bool qdr_delivery_settled_CT(qdr_core_t *core, qdr_delivery_t *dlv) } +static void qdr_do_message_to_addr_free(qdr_core_t *core, qdr_general_work_t *work) +{ + if (work->msg) + qd_message_free(work->msg); + if (work->on_message_context) + qd_iterator_free((qd_iterator_t *)work->on_message_context); +} + + static void qdr_delete_delivery_internal_CT(qdr_core_t *core, qdr_delivery_t *delivery) { qdr_link_t *link = delivery->link; - if (delivery->msg) - qd_message_free(delivery->msg); - - if (delivery->to_addr) - qd_iterator_free(delivery->to_addr); + if (delivery->msg || delivery->to_addr) { + qdr_general_work_t *work = qdr_general_work(qdr_do_message_to_addr_free); + work->msg = delivery->msg; + work->on_message_context = delivery->to_addr; + qdr_post_general_work_CT(core, work); + } if (delivery->tracking_addr) { delivery->tracking_addr->outstanding_deliveries[delivery->tracking_addr_bit]--; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org