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

Reply via email to