X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=liblttng-ust%2Flttng-ust-comm.c;h=3df2adc6f96e0b0b16189efe6497509ea845e3da;hb=e9e3e5727412b9dd68205930b0724f73d2e65437;hp=a73808e1128f7b63fbb62422e5f7bccc5115a9b4;hpb=458d678c8e42caa810b80a99d5f6a69f24598a37;p=lttng-ust.git diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c index a73808e1..3df2adc6 100644 --- a/liblttng-ust/lttng-ust-comm.c +++ b/liblttng-ust/lttng-ust-comm.c @@ -68,9 +68,14 @@ static int initialized; * * ust_exit_mutex must never nest in ust_mutex. * + * ust_fork_mutex must never nest in ust_mutex. + * * ust_mutex_nest is a per-thread nesting counter, allowing the perf * counter lazy initialization called by events within the statedump, * which traces while the ust_mutex is held. + * + * ust_lock nests within the dynamic loader lock (within glibc) because + * it is taken within the library constructor. */ static pthread_mutex_t ust_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -513,8 +518,8 @@ void handle_pending_statedump(struct sock_info *sock_info) int ctor_passed = sock_info->constructor_sem_posted; if (ctor_passed && sock_info->statedump_pending) { - pthread_mutex_lock(&ust_fork_mutex); sock_info->statedump_pending = 0; + pthread_mutex_lock(&ust_fork_mutex); lttng_handle_pending_statedump(sock_info); pthread_mutex_unlock(&ust_fork_mutex); }