Repository: qpid-dispatch Updated Branches: refs/heads/master 9b8f0efe9 -> 2a7745df9
DISPATCH-610 - Patch from Ted Ross. Added boolean flag cleared_proton_ref to indicate if a decref has already been performed for the lost reference from the Proton delivery Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/2a7745df Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/2a7745df Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/2a7745df Branch: refs/heads/master Commit: 2a7745df95b406d5c0d3592af7b2341c0d7b7d23 Parents: 9b8f0ef Author: Ganesh Murthy <[email protected]> Authored: Thu Jan 19 22:27:39 2017 -0500 Committer: Ganesh Murthy <[email protected]> Committed: Thu Jan 19 22:27:39 2017 -0500 ---------------------------------------------------------------------- src/router_core/connections.c | 14 +++++++++++--- src/router_core/router_core_private.h | 1 + 2 files changed, 12 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/2a7745df/src/router_core/connections.c ---------------------------------------------------------------------- diff --git a/src/router_core/connections.c b/src/router_core/connections.c index 2d88a7b..2f5316c 100644 --- a/src/router_core/connections.c +++ b/src/router_core/connections.c @@ -571,7 +571,10 @@ static void qdr_link_cleanup_CT(qdr_core_t *core, qdr_connection_t *conn, qdr_li // // Account for the lost reference from the Proton delivery // - qdr_delivery_decref_CT(core, ref->dlv); + if (!ref->dlv->cleared_proton_ref) { + qdr_delivery_decref_CT(core, ref->dlv); + ref->dlv->cleared_proton_ref = true; + } qdr_del_delivery_ref(&updated_deliveries, ref); ref = DEQ_HEAD(updated_deliveries); @@ -604,8 +607,10 @@ static void qdr_link_cleanup_CT(qdr_core_t *core, qdr_connection_t *conn, qdr_li // Account for the lost reference from the Proton delivery // for unsettled deliveries on incoming links // - if (link->link_direction == QD_INCOMING && !dlv->settled) + if (link->link_direction == QD_INCOMING && !dlv->settled && !dlv->cleared_proton_ref) { qdr_delivery_decref_CT(core, dlv); + dlv->cleared_proton_ref = true; + } dlv = DEQ_HEAD(undelivered); } @@ -645,7 +650,10 @@ static void qdr_link_cleanup_CT(qdr_core_t *core, qdr_connection_t *conn, qdr_li // // Account for the lost reference from the Proton delivery // - qdr_delivery_decref_CT(core, dlv); + if (!dlv->cleared_proton_ref) { + qdr_delivery_decref_CT(core, dlv); + dlv->cleared_proton_ref = true; + } dlv = DEQ_HEAD(unsettled); } http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/2a7745df/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 d032256..d3b22d1 100644 --- a/src/router_core/router_core_private.h +++ b/src/router_core/router_core_private.h @@ -217,6 +217,7 @@ struct qdr_delivery_t { qdr_error_t *error; bool settled; bool presettled; + bool cleared_proton_ref; qdr_delivery_where_t where; uint8_t tag[32]; int tag_length; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
