X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Fmain.c;h=bd19a323715309697ba3b3ff61c6d29a615ad379;hp=c099061ccf7339f03741fc3cda59fb5ae60901a6;hb=092b625914723e40ccb3345826a2280cbd01f8b8;hpb=6620da753247b1e0950c58ef3ce4f603c7da1ea5 diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c index c099061cc..bd19a3237 100644 --- a/src/bin/lttng-relayd/main.c +++ b/src/bin/lttng-relayd/main.c @@ -894,7 +894,10 @@ void relay_delete_session(struct relay_command *cmd, struct lttng_ht *streams_ht stream = caa_container_of(node, struct relay_stream, stream_n); if (stream->session == cmd->session) { - close(stream->fd); + ret = close(stream->fd); + if (ret < 0) { + PERROR("close stream fd on delete session"); + } ret = lttng_ht_del(streams_ht, &iter); assert(!ret); call_rcu(&stream->rcu_node, @@ -1055,7 +1058,10 @@ int relay_close_stream(struct lttcomm_relayd_hdr *recv_hdr, if (close_stream_check(stream)) { int delret; - close(stream->fd); + delret = close(stream->fd); + if (delret < 0) { + PERROR("close stream"); + } delret = lttng_ht_del(streams_ht, &iter); assert(!delret); call_rcu(&stream->rcu_node, @@ -1275,7 +1281,7 @@ int relay_send_version(struct lttcomm_relayd_hdr *recv_hdr, struct relay_command *cmd) { int ret; - struct lttcomm_relayd_version reply; + struct lttcomm_relayd_version reply, msg; struct relay_session *session; if (cmd->session == NULL) { @@ -1293,6 +1299,21 @@ int relay_send_version(struct lttcomm_relayd_hdr *recv_hdr, } session->version_check_done = 1; + /* Get version from the other side. */ + ret = cmd->sock->ops->recvmsg(cmd->sock, &msg, sizeof(msg), MSG_WAITALL); + if (ret < 0 || ret != sizeof(msg)) { + ret = -1; + ERR("Relay failed to receive the version values."); + goto end; + } + + /* + * For now, we just ignore the received version but after 2.1 stable + * release, a check must be done to see if we either adapt to the other + * side version (which MUST be lower than us) or keep the latest data + * structure considering that the other side will adapt. + */ + ret = sscanf(VERSION, "%u.%u", &reply.major, &reply.minor); if (ret < 2) { ERR("Error in scanning version"); @@ -1533,9 +1554,13 @@ int relay_process_data(struct relay_command *cmd, struct lttng_ht *streams_ht) /* Check if we need to close the FD */ if (close_stream_check(stream)) { + int cret; struct lttng_ht_iter iter; - close(stream->fd); + cret = close(stream->fd); + if (cret < 0) { + PERROR("close stream process data"); + } iter.iter.node = &stream->stream_n.node; ret = lttng_ht_del(streams_ht, &iter); assert(!ret);