X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=src%2Flib%2Flttng-ust%2Flttng-ust-comm.c;h=e206456f0d98060ea20c2310c4f993c1d6494ece;hb=90d125c709f566f3663bf84677f100134cc618e0;hp=7f34efe7a2f95ec9e934c0005d163bd71cd0ffcd;hpb=8794c2dfa6542dbe99c8901ee553d1b43dcb7b77;p=lttng-ust.git diff --git a/src/lib/lttng-ust/lttng-ust-comm.c b/src/lib/lttng-ust/lttng-ust-comm.c index 7f34efe7..e206456f 100644 --- a/src/lib/lttng-ust/lttng-ust-comm.c +++ b/src/lib/lttng-ust/lttng-ust-comm.c @@ -370,16 +370,26 @@ static char *get_map_shm(struct sock_info *sock_info); /* * Returns the HOME directory path. Caller MUST NOT free(3) the returned * pointer. + * The following env are checked in order of priority: + * 1 - LTTNG_UST_HOME + * 2 - LTTNG_HOME + * 3 - HOME */ static const char *get_lttng_home_dir(void) { const char *val; + val = (const char *) lttng_ust_getenv("LTTNG_UST_HOME"); + if (val != NULL) { + return val; + } + val = (const char *) lttng_ust_getenv("LTTNG_HOME"); if (val != NULL) { return val; } + return (const char *) lttng_ust_getenv("HOME"); } @@ -387,41 +397,41 @@ const char *get_lttng_home_dir(void) * Force a read (imply TLS allocation for dlopen) of TLS variables. */ static -void lttng_nest_count_alloc_tls(void) +void lttng_ust_nest_count_alloc_tls(void) { - asm volatile ("" : : "m" (URCU_TLS(lttng_ust_nest_count))); + __asm__ __volatile__ ("" : : "m" (URCU_TLS(lttng_ust_nest_count))); } static void lttng_ust_mutex_nest_alloc_tls(void) { - asm volatile ("" : : "m" (URCU_TLS(ust_mutex_nest))); + __asm__ __volatile__ ("" : : "m" (URCU_TLS(ust_mutex_nest))); } /* * Allocate lttng-ust urcu TLS. */ static -void lttng_lttng_ust_urcu_alloc_tls(void) +void lttng_ust_urcu_alloc_tls(void) { (void) lttng_ust_urcu_read_ongoing(); } -void lttng_ust_alloc_tls(void) +void lttng_ust_common_init_thread(int flags) { - lttng_lttng_ust_urcu_alloc_tls(); + lttng_ust_urcu_alloc_tls(); lttng_ringbuffer_alloc_tls(); - lttng_vtid_alloc_tls(); - lttng_nest_count_alloc_tls(); - lttng_procname_alloc_tls(); + lttng_ust_vtid_init_thread(flags); + lttng_ust_nest_count_alloc_tls(); + lttng_ust_procname_init_thread(flags); lttng_ust_mutex_nest_alloc_tls(); - lttng_ust_perf_counter_alloc_tls(); + lttng_ust_perf_counter_init_thread(flags); lttng_ust_common_alloc_tls(); - lttng_cgroup_ns_alloc_tls(); - lttng_ipc_ns_alloc_tls(); - lttng_net_ns_alloc_tls(); - lttng_time_ns_alloc_tls(); - lttng_uts_ns_alloc_tls(); + lttng_ust_cgroup_ns_init_thread(flags); + lttng_ust_ipc_ns_init_thread(flags); + lttng_ust_net_ns_init_thread(flags); + lttng_ust_time_ns_init_thread(flags); + lttng_ust_uts_ns_init_thread(flags); lttng_ust_ring_buffer_client_discard_alloc_tls(); lttng_ust_ring_buffer_client_discard_rt_alloc_tls(); lttng_ust_ring_buffer_client_overwrite_alloc_tls(); @@ -446,7 +456,9 @@ void lttng_ust_init_thread(void) * ensure those are initialized before a signal handler nesting over * this thread attempts to use them. */ - lttng_ust_alloc_tls(); + lttng_ust_common_init_thread(LTTNG_UST_INIT_THREAD_MASK); + + lttng_ust_urcu_register_thread(); } int lttng_get_notify_socket(void *owner) @@ -1582,14 +1594,14 @@ open_write: pid = fork(); URCU_TLS(lttng_ust_nest_count)--; if (pid > 0) { - int status; + int status, wait_ret; /* * Parent: wait for child to return, in which case the * shared memory map will have been created. */ - pid = wait(&status); - if (pid < 0 || !WIFEXITED(status) || WEXITSTATUS(status) != 0) { + wait_ret = waitpid(pid, &status, 0); + if (wait_ret < 0 || !WIFEXITED(status) || WEXITSTATUS(status) != 0) { wait_shm_fd = -1; goto end; } @@ -1815,7 +1827,7 @@ void *ust_listener_thread(void *arg) int sock, ret, prev_connect_failed = 0, has_waited = 0, fd; long timeout; - lttng_ust_alloc_tls(); + lttng_ust_common_init_thread(0); /* * If available, add '-ust' to the end of this thread's * process name @@ -2183,7 +2195,7 @@ void lttng_ust_ctor(void) * to be the dynamic linker mutex) and ust_lock, taken within * the ust lock. */ - lttng_ust_alloc_tls(); + lttng_ust_common_init_thread(0); lttng_ust_loaded = 1; @@ -2497,7 +2509,7 @@ void lttng_ust_before_fork(sigset_t *save_sigset) int ret; /* Allocate lttng-ust TLS. */ - lttng_ust_alloc_tls(); + lttng_ust_common_init_thread(0); if (URCU_TLS(lttng_ust_nest_count)) return;