Using the set_consumer_uri call, the connection is established between
the session daemon and the relayd then sent to the relayd. However, when
start_tracing is initiated, the sessiond creates, if needed, the relayd
sockets and send them to the consumer. A validation was missing in one
of the function call to validate if the sockets were already sent to the
consumer.
Note that using lttng_create_session with a remote URL, the sockets are
created only when tracing starts thus not having this issue.
This fixes leaks on the relayd and consumerd when destroying a session.
Fixes #374 #382
Signed-off-by: David Goulet <dgoulet@efficios.com>
int ret;
struct lttcomm_sock *sock = NULL;
+ /* Don't resend the sockets to the consumer. */
+ if (consumer->dst.net.relayd_socks_sent) {
+ ret = LTTNG_OK;
+ goto error;
+ }
+
/* Set the network sequence index if not set. */
if (consumer->net_seq_index == -1) {
/*
lttcomm_destroy_sock(sock);
}
+error:
return ret;
}