You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2017/10/18 14:43:28 UTC
[06/15] qpid-dispatch git commit: DISPATCH-829 - Added a proton_ref
set flag so we can incref and decref accordingly
DISPATCH-829 - Added a proton_ref set flag so we can incref and decref accordingly
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/5630becc
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/5630becc
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/5630becc
Branch: refs/heads/master
Commit: 5630becc56002bcb67502bead6f5da07d80078b2
Parents: a1726fa
Author: Ganesh Murthy <gm...@redhat.com>
Authored: Thu Oct 5 17:59:01 2017 -0400
Committer: Ted Ross <tr...@redhat.com>
Committed: Wed Oct 18 08:11:40 2017 -0400
----------------------------------------------------------------------
include/qpid/dispatch/router_core.h | 2 ++
src/router_core/router_core_private.h | 1 +
src/router_core/transfer.c | 10 ++++++++++
src/router_node.c | 8 +++++++-
4 files changed, 20 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/5630becc/include/qpid/dispatch/router_core.h
----------------------------------------------------------------------
diff --git a/include/qpid/dispatch/router_core.h b/include/qpid/dispatch/router_core.h
index 701cf1c..96bebc9 100644
--- a/include/qpid/dispatch/router_core.h
+++ b/include/qpid/dispatch/router_core.h
@@ -617,6 +617,8 @@ bool qdr_delivery_tag_sent(const qdr_delivery_t *delivery);
void qdr_delivery_set_tag_sent(const qdr_delivery_t *delivery, bool tag_sent);
bool qdr_delivery_receive_complete(const qdr_delivery_t *delivery);
void qdr_delivery_set_cleared_proton_ref(qdr_delivery_t *dlv, bool cleared_proton_ref);
+void qdr_delivery_set_set_proton_ref(qdr_delivery_t *dlv, bool set_proton_ref);
+bool qdr_delivery_get_set_proton_ref(qdr_delivery_t *dlv);
/**
******************************************************************************
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/5630becc/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 6805e92..de14f5f 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -340,6 +340,7 @@ struct qdr_delivery_t {
bool settled;
bool presettled;
bool cleared_proton_ref;
+ bool set_proton_ref;
qdr_delivery_where_t where;
uint8_t tag[32];
int tag_length;
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/5630becc/src/router_core/transfer.c
----------------------------------------------------------------------
diff --git a/src/router_core/transfer.c b/src/router_core/transfer.c
index ac75abe..4756960 100644
--- a/src/router_core/transfer.c
+++ b/src/router_core/transfer.c
@@ -283,6 +283,16 @@ void qdr_delivery_set_cleared_proton_ref(qdr_delivery_t *dlv, bool cleared_proto
dlv->cleared_proton_ref = cleared_proton_ref;
}
+void qdr_delivery_set_set_proton_ref(qdr_delivery_t *dlv, bool set_proton_ref)
+{
+ dlv->set_proton_ref = set_proton_ref;
+}
+
+bool qdr_delivery_get_set_proton_ref(qdr_delivery_t *dlv)
+{
+ return dlv->set_proton_ref;
+}
+
void *qdr_delivery_get_context(qdr_delivery_t *delivery)
{
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/5630becc/src/router_node.c
----------------------------------------------------------------------
diff --git a/src/router_node.c b/src/router_node.c
index 4245189..aadc312 100644
--- a/src/router_node.c
+++ b/src/router_node.c
@@ -1242,6 +1242,7 @@ static void CORE_link_deliver(void *context, qdr_link_t *link, qdr_delivery_t *d
{
qd_router_t *router = (qd_router_t*) context;
qd_link_t *qlink = (qd_link_t*) qdr_link_get_context(link);
+
if (!qlink)
return;
@@ -1276,6 +1277,7 @@ static void CORE_link_deliver(void *context, qdr_link_t *link, qdr_delivery_t *d
if (qdr_delivery_get_context(dlv) == 0) {
pn_delivery_set_context(pdlv, dlv);
qdr_delivery_set_context(dlv, pdlv);
+ qdr_delivery_set_set_proton_ref(dlv, true);
qdr_delivery_incref(dlv);
}
}
@@ -1290,6 +1292,7 @@ static void CORE_link_deliver(void *context, qdr_link_t *link, qdr_delivery_t *d
bool restart_rx = false;
qd_message_t *msg_out = qdr_delivery_message(dlv);
+
qd_message_send(msg_out, qlink, qdr_link_strip_annotations_out(link), &restart_rx);
if (restart_rx) {
@@ -1320,7 +1323,10 @@ static void CORE_link_deliver(void *context, qdr_link_t *link, qdr_delivery_t *d
pn_link_advance(plink);
pn_delivery_settle(pdlv);
qdr_delivery_set_cleared_proton_ref(dlv, true);
- qdr_delivery_decref(router->router_core, dlv);
+
+ if (qdr_delivery_get_set_proton_ref(dlv)) {
+ qdr_delivery_decref(router->router_core, dlv);
+ }
}
} else {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org