This is an automated email from the ASF dual-hosted git repository.
kgiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git
The following commit(s) were added to refs/heads/main by this push:
new 18ac554 DISPATCH-2099: flush stream_data before releasing deliveries
18ac554 is described below
commit 18ac55448fea287339a6cc4bdbfd076ae9b6dd46
Author: Kenneth Giusti <[email protected]>
AuthorDate: Tue May 4 13:23:18 2021 -0400
DISPATCH-2099: flush stream_data before releasing deliveries
This closes #1183
---
src/adaptors/tcp_adaptor.c | 8 +++++---
src/message.c | 5 +++++
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/adaptors/tcp_adaptor.c b/src/adaptors/tcp_adaptor.c
index e75f1ee..92b9774 100644
--- a/src/adaptors/tcp_adaptor.c
+++ b/src/adaptors/tcp_adaptor.c
@@ -437,7 +437,7 @@ static void flush_outgoing_buffs(qdr_tcp_connection_t *conn)
// Flush in-progress stream data object
if (conn->outgoing_stream_data) {
- free_qd_message_stream_data_t(conn->outgoing_stream_data);
+ qd_message_stream_data_release(conn->outgoing_stream_data);
conn->outgoing_stream_data = 0;
}
}
@@ -459,6 +459,10 @@ static void free_qdr_tcp_connection(qdr_tcp_connection_t*
tc)
static void handle_disconnected(qdr_tcp_connection_t* conn)
{
+ // release all message buffers since the deliveries will free the message
+ // once we decref them.
+ flush_outgoing_buffs(conn);
+
if (conn->instream) {
qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG,
"[C%"PRIu64"][L%"PRIu64"] handle_disconnected - close instream",
@@ -494,8 +498,6 @@ static void handle_disconnected(qdr_tcp_connection_t* conn)
qdr_delivery_decref(tcp_adaptor->core, conn->initial_delivery,
"tcp-adaptor.handle_disconnected - initial_delivery");
conn->initial_delivery = 0;
}
- flush_outgoing_buffs(conn);
-
//need to free on core thread to avoid deleting while in use by management
agent
qdr_action_t *action = qdr_action(qdr_del_tcp_connection_CT,
"delete_tcp_connection");
diff --git a/src/message.c b/src/message.c
index ebb3f77..25aa495 100644
--- a/src/message.c
+++ b/src/message.c
@@ -1041,6 +1041,11 @@ void qd_message_free(qd_message_t *in_msg)
//
LOCK(content->lock);
+ // DISPATCH-2099: ensure all outstanding stream_data items associated
+ // with this message have been returned since the underlying buffers
+ // may be released
+ assert(DEQ_IS_EMPTY(msg->stream_data_list));
+
const bool was_blocked = !qd_message_Q2_holdoff_should_unblock(in_msg);
qd_buffer_t *buf = msg->cursor.buffer;
while (buf) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]