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,
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,
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) {
}
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");
/* 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);