X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libust%2Ftracectl.c;h=e877e6289f7ef0e32ca88c6ab595f7117a81298b;hb=49d70d5aa7bc256392cc32127616c311c69cdd92;hp=7c054670e41de5a186f02f4c4bceb2b09bee8f16;hpb=0222e1213f196b66cbc08cd29093aca4a28e9ffb;p=ust.git diff --git a/libust/tracectl.c b/libust/tracectl.c index 7c05467..e877e62 100644 --- a/libust/tracectl.c +++ b/libust/tracectl.c @@ -39,6 +39,7 @@ #include #include #include +#include #include "tracer.h" #include "usterr.h" #include "ustcomm.h" @@ -73,6 +74,8 @@ static struct cds_list_head ust_socks = CDS_LIST_HEAD_INIT(ust_socks); /* volatile because shared between the listener and the main thread */ int buffers_to_export = 0; +int ust_clock_source; + static long long make_pidunique(void) { s64 retval; @@ -122,10 +125,10 @@ static void print_trace_events(FILE *fp) unlock_trace_events(); } -static int connect_ustd(void) +static int connect_ustconsumer(void) { int result, fd; - char default_daemon_path[] = SOCK_DIR "/ustd"; + char default_daemon_path[] = SOCK_DIR "/ustconsumer"; char *explicit_daemon_path, *daemon_path; explicit_daemon_path = getenv("UST_DAEMON_SOCKET"); @@ -139,7 +142,7 @@ static int connect_ustd(void) result = ustcomm_connect_path(daemon_path, &fd); if (result < 0) { - WARN("connect_ustd failed, daemon_path: %s", + WARN("connect_ustconsumer failed, daemon_path: %s", daemon_path); return result; } @@ -194,12 +197,12 @@ static void inform_consumer_daemon(const char *trace_name) struct ust_trace *trace; const char *ch_name; - sock = connect_ustd(); + sock = connect_ustconsumer(); if (sock < 0) { return; } - DBG("Connected to ustd"); + DBG("Connected to ustconsumer"); ltt_lock_traces(); @@ -548,20 +551,18 @@ static void force_subbuf_switch() /* 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_sock_path *sock_msg; - sock_msg = (struct ustcomm_sock_path *)recv_buf; - sock_msg->sock_path = - ustcomm_restore_ptr(sock_msg->sock_path, - sock_msg->data, - sizeof(sock_msg->data)); - if (!sock_msg->sock_path) { - - return -EINVAL; + 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->sock_path, 1); + return setenv("UST_DAEMON_SOCKET", sock_msg->field, 1); } case FORCE_SUBBUF_SWITCH: @@ -999,22 +1000,22 @@ static void process_client_cmd(struct ustcomm_header *recv_header, } case GET_SOCK_PATH: { - struct ustcomm_sock_path *sock_msg; + struct ustcomm_single_field *sock_msg; char *sock_path_env; - sock_msg = (struct ustcomm_sock_path *)send_buf; + sock_msg = (struct ustcomm_single_field *)send_buf; sock_path_env = getenv("UST_DAEMON_SOCKET"); if (!sock_path_env) { - result = ustcomm_pack_sock_path(reply_header, - sock_msg, - SOCK_DIR "/ustd"); + result = ustcomm_pack_single_field(reply_header, + sock_msg, + SOCK_DIR "/ustconsumer"); } else { - result = ustcomm_pack_sock_path(reply_header, - sock_msg, - sock_path_env); + result = ustcomm_pack_single_field(reply_header, + sock_msg, + sock_path_env); } reply_header->result = result; @@ -1028,10 +1029,10 @@ static void process_client_cmd(struct ustcomm_header *recv_header, case STOP_TRACE: case DESTROY_TRACE: { - struct ustcomm_trace_info *trace_inf = - (struct ustcomm_trace_info *)recv_buf; + struct ustcomm_single_field *trace_inf = + (struct ustcomm_single_field *)recv_buf; - result = ustcomm_unpack_trace_info(trace_inf); + result = ustcomm_unpack_single_field(trace_inf); if (result < 0) { ERR("couldn't unpack trace info"); reply_header->result = -EINVAL; @@ -1040,7 +1041,7 @@ static void process_client_cmd(struct ustcomm_header *recv_header, reply_header->result = process_trace_cmd(recv_header->command, - trace_inf->trace); + trace_inf->field); goto send_response; } @@ -1231,6 +1232,7 @@ free_name: static void __attribute__((constructor)) init() { + struct timespec ts; int result; char* autoprobe_val = NULL; char* subbuffer_size_val = NULL; @@ -1264,6 +1266,15 @@ static void __attribute__((constructor)) init() create_listener(); + /* Get clock the clock source type */ + + /* Default clock source */ + ust_clock_source = CLOCK_TRACE; + if (clock_gettime(ust_clock_source, &ts) != 0) { + ust_clock_source = CLOCK_MONOTONIC; + DBG("UST traces will not be synchronized with LTTng traces"); + } + autoprobe_val = getenv("UST_AUTOPROBE"); if (autoprobe_val) { struct marker_iter iter; @@ -1498,7 +1509,7 @@ static void stop_listener(void) } /* This destructor keeps the process alive for a few seconds in order - * to leave time to ustd to connect to its buffers. This is necessary + * to leave time for ustconsumer to connect to its buffers. This is necessary * for programs whose execution is very short. It is also useful in all * programs when tracing is started close to the end of the program * execution.