X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=libust%2Ftracectl.c;h=ae92b7e17577f279d30456622842037d371455ca;hb=dbd75de7b2c05c98d6171bc531a1ecb23fb7e80d;hp=463edb6b492897546a84cf3161c07c680a12eb10;hpb=e005efaa25bb1c65019e147e5290733cf5e0c82d;p=ust.git diff --git a/libust/tracectl.c b/libust/tracectl.c index 463edb6..ae92b7e 100644 --- a/libust/tracectl.c +++ b/libust/tracectl.c @@ -77,8 +77,6 @@ static struct ustcomm_sock *listen_sock; extern struct chan_info_struct chan_infos[]; -static struct cds_list_head open_buffers_list = CDS_LIST_HEAD_INIT(open_buffers_list); - static struct cds_list_head ust_socks = CDS_LIST_HEAD_INIT(ust_socks); /* volatile because shared between the listener and the main thread */ @@ -489,11 +487,6 @@ static int notify_buffer_mapped(const char *trace_name, CMM_STORE_SHARED(buffers_to_export, CMM_LOAD_SHARED(buffers_to_export)-1); } - /* The buffer has been exported, ergo, we can add it to the - * list of open buffers - */ - cds_list_add(&buf->open_buffers_list, &open_buffers_list); - unlock_traces: ltt_unlock_traces(); @@ -584,31 +577,6 @@ unlock_traces: return retval; } -/* Simple commands are those which need only respond with a return value. */ -static int process_simple_client_cmd(int command, char *recv_buf) -{ - int result; - - switch(command) { - case SET_SOCK_PATH: - { - struct ustcomm_single_field *sock_msg; - sock_msg = (struct ustcomm_single_field *)recv_buf; - result = ustcomm_unpack_single_field(sock_msg); - if (result < 0) { - return result; - } - return setenv("UST_DAEMON_SOCKET", sock_msg->field, 1); - } - - default: - return -EINVAL; - } - - return 0; -} - - static int process_trace_cmd(int command, char *trace_name) { int result; @@ -1060,6 +1028,21 @@ static void process_client_cmd(struct ustcomm_header *recv_header, goto send_response; } + case SET_SOCK_PATH: + { + struct ustcomm_single_field *sock_msg; + sock_msg = (struct ustcomm_single_field *)recv_buf; + result = ustcomm_unpack_single_field(sock_msg); + if (result < 0) { + reply_header->result = -EINVAL; + goto send_response; + } + + reply_header->result = setenv("UST_DAEMON_SOCKET", + sock_msg->field, 1); + + goto send_response; + } case START: case SETUP_TRACE: case ALLOC_TRACE: @@ -1086,11 +1069,9 @@ static void process_client_cmd(struct ustcomm_header *recv_header, } default: - reply_header->result = - process_simple_client_cmd(recv_header->command, - recv_buf); - goto send_response; + reply_header->result = -EINVAL; + goto send_response; } return; @@ -1240,37 +1221,41 @@ static void auto_probe_connect(struct marker *m) static struct ustcomm_sock * init_app_socket(int epoll_fd) { - char *name; + char *dir_name, *sock_name; int result; - struct ustcomm_sock *sock; + struct ustcomm_sock *sock = NULL; + + dir_name = ustcomm_user_sock_dir(); + if (!dir_name) + return NULL; - result = asprintf(&name, "%s/%d", SOCK_DIR, (int)getpid()); + result = asprintf(&sock_name, "%s/%d", dir_name, (int)getpid()); if (result < 0) { ERR("string overflow allocating socket name, " "UST thread bailing"); - return NULL; + goto free_dir_name; } - result = ensure_dir_exists(SOCK_DIR); + result = ensure_dir_exists(dir_name); if (result == -1) { ERR("Unable to create socket directory %s, UST thread bailing", - SOCK_DIR); - goto free_name; + dir_name); + goto free_sock_name; } - sock = ustcomm_init_named_socket(name, epoll_fd); + sock = ustcomm_init_named_socket(sock_name, epoll_fd); if (!sock) { ERR("Error initializing named socket (%s). Check that directory" - "exists and that it is writable. UST thread bailing", name); - goto free_name; + "exists and that it is writable. UST thread bailing", sock_name); + goto free_sock_name; } - free(name); - return sock; +free_sock_name: + free(sock_name); +free_dir_name: + free(dir_name); -free_name: - free(name); - return NULL; + return sock; } static void __attribute__((constructor)) init() @@ -1610,7 +1595,6 @@ void ust_potential_exec(void) static void ust_fork(void) { - struct ust_buffer *buf, *buf_tmp; struct ustcomm_sock *sock, *sock_tmp; struct ust_trace *trace, *trace_tmp; int result; @@ -1634,12 +1618,6 @@ static void ust_fork(void) ustcomm_del_sock(sock, 1); } - /* Delete all blocked consumers */ - cds_list_for_each_entry_safe(buf, buf_tmp, &open_buffers_list, - open_buffers_list) { - cds_list_del(&buf->open_buffers_list); - } - /* * FIXME: This could be prettier, we loop over the list twice and * following good locking practice should lock around the loop