X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;ds=sidebyside;f=ltt-sessiond%2Fmain.c;h=5327804c33b3ec62fcfb6905f572bda798e97242;hb=5dc1855009c9b215a108bc56e7df64d9862c8144;hp=9df204939cd56877e4bfc96170808f52aad9d54c;hpb=8429162939cad95af39b6ec8edc56959975ab316;p=lttng-tools.git diff --git a/ltt-sessiond/main.c b/ltt-sessiond/main.c index 9df204939..5327804c3 100644 --- a/ltt-sessiond/main.c +++ b/ltt-sessiond/main.c @@ -45,6 +45,7 @@ #include "ust-ctl.h" #include "session.h" #include "traceable-app.h" +#include "lttng-kconsumerd.h" /* * TODO: @@ -55,7 +56,7 @@ /* Const values */ const char default_home_dir[] = DEFAULT_HOME_DIR; -const char default_tracing_group[] = DEFAULT_TRACING_GROUP; +const char default_tracing_group[] = LTTNG_DEFAULT_TRACING_GROUP; const char default_ust_sock_dir[] = DEFAULT_UST_SOCK_DIR; const char default_global_apps_pipe[] = DEFAULT_GLOBAL_APPS_PIPE; @@ -90,50 +91,6 @@ static sem_t kconsumerd_sem; static pthread_mutex_t kconsumerd_pid_mutex; /* Mutex to control kconsumerd pid assignation */ -/* - * free_kernel_session - * - * Free all data structure inside a kernel session and the session pointer. - */ -static void free_kernel_session(struct ltt_kernel_session *session) -{ - struct ltt_kernel_channel *chan; - struct ltt_kernel_stream *stream; - struct ltt_kernel_event *event; - - /* Clean metadata */ - close(session->metadata_stream_fd); - close(session->metadata->fd); - free(session->metadata->conf); - free(session->metadata); - - cds_list_for_each_entry(chan, &session->channel_list.head, list) { - /* Clean all event(s) */ - cds_list_for_each_entry(event, &chan->events_list.head, list) { - close(event->fd); - free(event->event); - free(event); - } - - /* Clean streams */ - cds_list_for_each_entry(stream, &chan->stream_list.head, list) { - close(stream->fd); - free(stream->pathname); - free(stream); - } - /* Clean channel */ - close(chan->fd); - free(chan->channel); - free(chan->pathname); - free(chan); - } - - close(session->fd); - free(session); - - DBG("All kernel session data structures freed"); -} - /* * teardown_kernel_session * @@ -144,7 +101,7 @@ static void teardown_kernel_session(struct ltt_session *session) { if (session->kernel_session != NULL) { DBG("Tearing down kernel session"); - free_kernel_session(session->kernel_session); + trace_destroy_kernel_session(session->kernel_session); /* Extra precaution */ session->kernel_session = NULL; /* Decrement session count */ @@ -390,22 +347,28 @@ static void *thread_manage_kconsumerd(void *data) sem_post(&kconsumerd_sem); DBG("Kconsumerd command socket ready"); } else { - DBG("[sessiond] Kconsumerd error when waiting for SOCK_READY : %s", + DBG("Kconsumerd error when waiting for SOCK_READY : %s", lttcomm_get_readable_code(-code)); goto error; } - /* Wait for any kconsumerd error */ - ret = lttcomm_recv_unix_sock(sock, &code, sizeof(enum lttcomm_return_code)); - if (ret <= 0) { - ERR("[sessiond] Kconsumerd closed the command socket"); - goto error; - } + while (1) { + /* Wait for any kconsumerd error */ + ret = lttcomm_recv_unix_sock(sock, &code, sizeof(enum lttcomm_return_code)); + if (ret <= 0) { + ERR("Kconsumerd closed the command socket"); + goto error; + } - ERR("Kconsumerd return code : %s", lttcomm_get_readable_code(-code)); + ERR("Kconsumerd return code : %s", lttcomm_get_readable_code(-code)); + if (code != KCONSUMERD_POLL_HUP) { + goto error; + } + } error: kconsumerd_pid = 0; + DBG("Kconsumerd thread dying"); return NULL; } @@ -569,6 +532,8 @@ static int start_kconsumerd(void) } pthread_mutex_unlock(&kconsumerd_pid_mutex); + DBG("Kconsumerd pid %d", ret); + DBG("Spawning kconsumerd thread"); ret = spawn_kconsumerd_thread(); @@ -620,7 +585,7 @@ static int send_kconsumerd_fds(int sock, struct ltt_kernel_session *session) /* Setup header */ lkh.payload_size = nb_fd * sizeof(struct lttcomm_kconsumerd_msg); - lkh.cmd_type = LTTCOMM_ADD_STREAM; + lkh.cmd_type = ADD_STREAM; DBG("Sending kconsumerd header"); @@ -658,6 +623,7 @@ static int create_trace_dir(struct ltt_kernel_session *session) /* Create all channel directories */ cds_list_for_each_entry(chan, &session->channel_list.head, list) { + DBG("Creating trace directory at %s", chan->pathname); ret = mkdir(chan->pathname, S_IRWXU | S_IRWXG ); if (ret < 0) { perror("mkdir trace path"); @@ -672,7 +638,6 @@ error: return ret; } - /* * process_client_msg *