X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=liblttng-ust%2Flttng-ust-comm.c;h=5c4e4e76609b9d637ace3622505c27304f19d618;hb=e81a53afbf8fc88951cace52adc45bb02994fe55;hp=d0239cda76f51d25129626f4a0da5659cef564d6;hpb=b728d87e617189fe9898a9492a559ecf949d2348;p=lttng-ust.git diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c index d0239cda..5c4e4e76 100644 --- a/liblttng-ust/lttng-ust-comm.c +++ b/liblttng-ust/lttng-ust-comm.c @@ -37,14 +37,14 @@ #include #include #include +#include -#include #include -#include #include -#include -#include #include +#include +#include +#include "tracepoint-internal.h" #include "ltt-tracer-core.h" /* @@ -167,6 +167,7 @@ int register_app_to_sessiond(int socket) pid_t ppid; uid_t uid; gid_t gid; + uint32_t bits_per_long; char name[16]; /* process name */ } reg_msg; @@ -176,6 +177,7 @@ int register_app_to_sessiond(int socket) reg_msg.ppid = getppid(); reg_msg.uid = getuid(); reg_msg.gid = getgid(); + reg_msg.bits_per_long = CAA_BITS_PER_LONG; prctl_ret = prctl(PR_GET_NAME, (unsigned long) reg_msg.name, 0, 0, 0); if (prctl_ret) { ERR("Error executing prctl"); @@ -301,13 +303,11 @@ end: shm_fd = lum->u.channel.shm_fd; wait_fd = lum->u.channel.wait_fd; break; - case LTTNG_UST_VERSION: + case LTTNG_UST_TRACER_VERSION: lur.u.version = lum->u.version; break; case LTTNG_UST_TRACEPOINT_LIST_GET: - memcpy(lur.u.tracepoint_list_entry, - lum->u.tracepoint_list_entry, - LTTNG_UST_SYM_NAME_LEN); + memcpy(&lur.u.tracepoint, &lum->u.tracepoint, sizeof(lur.u.tracepoint)); break; } ret = send_reply(sock, &lur); @@ -561,14 +561,14 @@ void wait_for_sessiond(struct sock_info *sock_info) if (ret < 0) { if (errno == EFAULT) { wait_poll_fallback = 1; - WARN( + DBG( "Linux kernels 2.6.33 to 3.0 (with the exception of stable versions) " "do not support FUTEX_WAKE on read-only memory mappings correctly. " "Please upgrade your kernel " "(fix is commit 9ea71503a8ed9184d2d0b8ccc4d269d05f7940ae in Linux kernel " "mainline). LTTng-UST will use polling mode fallback."); + PERROR("futex"); } - PERROR("futex"); } } return; @@ -681,6 +681,20 @@ restart: switch (len) { case 0: /* orderly shutdown */ DBG("%s ltt-sessiond has performed an orderly shutdown\n", sock_info->name); + ust_lock(); + /* + * Either sessiond has shutdown or refused us by closing the socket. + * In either case, we don't want to delay construction execution, + * and we need to wait before retry. + */ + prev_connect_failed = 1; + /* + * If we cannot register to the sessiond daemon, don't + * delay constructor execution. + */ + ret = handle_register_done(sock_info); + assert(!ret); + ust_unlock(); goto end; case sizeof(lum): DBG("message received\n"); @@ -690,6 +704,7 @@ restart: } continue; case -1: + DBG("Receive failed from lttng-sessiond with errno %d", errno); if (errno == ECONNRESET) { ERR("%s remote end closed connection\n", sock_info->name); goto end; @@ -904,7 +919,7 @@ static void ust_after_fork_common(sigset_t *restore_sigset) DBG("process %d", getpid()); ust_unlock(); /* Restore signals */ - ret = sigprocmask(SIG_SETMASK, &restore_sigset, NULL); + ret = sigprocmask(SIG_SETMASK, restore_sigset, NULL); if (ret == -1) { PERROR("sigprocmask"); }