[lttng-dev] [PATCH lttng-tools 2/2] Fix: reply to version check even on protocol mismatch

Julien Desfossez jdesfossez at efficios.com
Wed Feb 14 16:32:45 EST 2018


In the relay, we currently put the connection when we detect the major
version from the session daemon is not compatible. We don't reply to the
version check message. The relay still holds a reference on the
connection so it is not closed and the session daemon is left blocking
in recvmsg.

The relay now replies to the version check so the session daemon knows
it is not compatible, and the relay completely closes the connection on
its side and removes the FD from the poll set.

Signed-off-by: Julien Desfossez <jdesfossez at efficios.com>
---
 src/bin/lttng-relayd/main.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c
index 61f206f..cd4f058 100644
--- a/src/bin/lttng-relayd/main.c
+++ b/src/bin/lttng-relayd/main.c
@@ -1601,6 +1601,7 @@ static int relay_send_version(struct lttcomm_relayd_hdr *recv_hdr,
 {
 	int ret;
 	struct lttcomm_relayd_version reply, msg;
+	bool compatible = true;
 
 	conn->version_check_done = 1;
 
@@ -1625,9 +1626,7 @@ static int relay_send_version(struct lttcomm_relayd_hdr *recv_hdr,
 	if (reply.major != be32toh(msg.major)) {
 		DBG("Incompatible major versions (%u vs %u), deleting session",
 				reply.major, be32toh(msg.major));
-		connection_put(conn);
-		ret = 0;
-		goto end;
+		compatible = false;
 	}
 
 	conn->major = reply.major;
@@ -1646,6 +1645,11 @@ static int relay_send_version(struct lttcomm_relayd_hdr *recv_hdr,
 		ERR("Relay sending version");
 	}
 
+	if (!compatible) {
+		ret = -1;
+		goto end;
+	}
+
 	DBG("Version check done using protocol %u.%u", conn->major,
 			conn->minor);
 
-- 
2.7.4



More information about the lttng-dev mailing list