DISPATCH-1628: Use separate flag to signal locally closed connections
Sharing the connection.closed flag for local closed indication leads
to trouble with DISPATCH-1085 where an inbound large stream message is
followed closely by a connection close. Under certain conditions this
causes system_tests_one_router test_41_large_streaming_close_conn_test
to fail since the tail of the message is not received.
diff --git a/src/router_node.c b/src/router_node.c
index 5c14ca0..664b5b1 100644
--- a/src/router_node.c
+++ b/src/router_node.c
@@ -330,7 +330,7 @@
qd_connection_t *conn = qd_link_connection(link);
// DISPATCH-1628 DISPATCH-975 exit if router already closed this connection
- if (conn->closed) {
+ if (conn->closed_locally) {
return false;
}
@@ -416,7 +416,7 @@
qd_message_free(msg);
}
// stop activity on this connection
- conn->closed = true;
+ conn->closed_locally = true;
}
return false;
// oversize messages are not processed any further
diff --git a/src/server_private.h b/src/server_private.h
index 7a81b8f..005f7ad 100644
--- a/src/server_private.h
+++ b/src/server_private.h
@@ -144,6 +144,7 @@
qd_server_t *server;
bool opened; // An open callback was invoked for this connection
bool closed;
+ bool closed_locally;
int enqueued;
qd_timer_t *timer; // Timer for initial-setup
pn_connection_t *pn_conn;