Fix: Relayd and consumerd socket leaks
authorDavid Goulet <dgoulet@efficios.com>
Fri, 19 Oct 2012 16:07:36 +0000 (12:07 -0400)
committerDavid Goulet <dgoulet@efficios.com>
Fri, 19 Oct 2012 16:07:36 +0000 (12:07 -0400)
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>
src/bin/lttng-sessiond/cmd.c

index 06bf0f4f386832a199a199862e2416301d42e521..d1417efd76e52409be5573497d3ad0010b849ad9 100644 (file)
@@ -522,6 +522,12 @@ static int send_consumer_relayd_socket(int domain, struct ltt_session *session,
        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) {
                /*
@@ -566,6 +572,7 @@ close_sock:
                lttcomm_destroy_sock(sock);
        }
 
+error:
        return ret;
 }
 
This page took 0.03418 seconds and 4 git commands to generate.