You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gm...@apache.org on 2017/01/20 03:28:48 UTC
qpid-dispatch git commit: 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
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 <gm...@redhat.com>
Authored: Thu Jan 19 22:27:39 2017 -0500
Committer: Ganesh Murthy <gm...@redhat.com>
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: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org