Thanks for the reply. Here is a link to the repo https://github.com/ShehabElsayed/LTTng_debugging.git
It contains the LTTng source code I am using and one of the benchmarks that is causing problems. Shehab Y. Elsayed, MSc. PhD Student The Edwards S. Rogers Sr. Dept. of Electrical and Computer Engineering University of Toronto E-mail: shehaby...@gmail.com <https://webmail.rice.edu/imp/message.php?mailbox=INBOX&index=11#> On Tue, May 1, 2018 at 10:39 AM, Jonathan Rajotte-Julien < jonathan.rajotte-jul...@efficios.com> wrote: > Hi Shehab, > > Please provide a link to a lttng-ust git tree or an actual patch (git > format-patch). > This will help any person who might be interested in helping you including > myself. > > Cheers > > On Tue, May 01, 2018 at 09:31:52AM -0400, Shehab Elsayed wrote: > > Hi, > > > > I am trying to create wrappers for pthreads conditional variables > functions > > (wait, signal and broadcast) to insert tracepoints. I followed the same > > approach done for the mutex functions already provided with lttng, > however > > I am running into some problems. Mainly the applications seem to get > stuck > > when the conditional variable wrappers are enabled. > > > > Here is my implementation for the wrapper functions: > > int pthread_cond_wait(pthread_cond_t *condition, pthread_mutex_t > > *mutex) > > > > { > > > > static int (*cond_wait)(pthread_cond_t *, pthread_mutex_t > > *); > > int retval; > > > > > > > > if (!cond_wait) > > { > > > > cond_wait = dlsym(RTLD_NEXT, "pthread_cond_wait"); > > > > if (!cond_wait) > > { > > > > if (thread_in_trace) > > { > > > > > > abort(); > > > > > > } > > > > fprintf(stderr, "unable to initialize pthread wrapper > > library.\n"); > > return EINVAL; > > > > > > } > > > > > > } > > > > if (thread_in_trace) > > { > > > > return cond_wait(condition, mutex); > > > > > > } > > > > > > > > thread_in_trace = > > 1; > > > > tracepoint(lttng_ust_pthread, pthread_cond_wait_begin, condition, > > mutex, > > > > LTTNG_UST_CALLER_IP()); > > > > retval = cond_wait(condition, mutex); > > > > tracepoint(lttng_ust_pthread, pthread_cond_wait_end, condition, > > mutex, > > > > LTTNG_UST_CALLER_IP()); > > > > thread_in_trace = > > 0; > > > > return retval; > > > > } > > > > > > > > int pthread_cond_signal(pthread_cond_t > > *condition) > > > > { > > > > static int (*cond_signal)(pthread_cond_t > > *); > > > > int retval; > > > > > > > > if (!cond_signal) > > { > > > > cond_signal = dlsym(RTLD_NEXT, "pthread_cond_signal"); > > > > if (!cond_signal) > > { > > > > if (thread_in_trace) > > { > > > > > > abort(); > > > > > > } > > > > fprintf(stderr, "unable to initialize pthread wrapper > > library.\n"); > > return EINVAL; > > > > > > } > > > > > > } > > > > if (thread_in_trace) > > { > > > > return cond_signal(condition); > > > > > > } > > > > > > > > thread_in_trace = > > 1; > > > > tracepoint(lttng_ust_pthread, pthread_cond_signal_begin, > > condition, > > LTTNG_UST_CALLER_IP()); > > > > retval = cond_signal(condition); > > > > tracepoint(lttng_ust_pthread, pthread_cond_signal_end, > > condition, > > LTTNG_UST_CALLER_IP()); > > > > thread_in_trace = > > 0; > > > > return retval; > > > > } > > > > > > > > int pthread_cond_broadcast(pthread_cond_t > > *condition) > > > > { > > > > static int (*cond_broadcast)(pthread_cond_t > > *); > > int retval; > > > > > > > > if (!cond_broadcast) > > { > > > > cond_broadcast = dlsym(RTLD_NEXT, "pthread_cond_broadcast"); > > > > if (!cond_broadcast) > > { > > > > if (thread_in_trace) > > { > > > > > > abort(); > > > > > > } > > > > fprintf(stderr, "unable to initialize pthread wrapper > > library.\n"); > > return EINVAL; > > > > > > } > > > > > > } > > > > if (thread_in_trace) > > { > > > > return cond_broadcast(condition); > > > > > > } > > > > > > > > thread_in_trace = > > 1; > > > > tracepoint(lttng_ust_pthread, pthread_cond_broadcast_begin, > > condition, > > LTTNG_UST_CALLER_IP()); > > > > retval = cond_broadcast(condition); > > > > tracepoint(lttng_ust_pthread, pthread_cond_broadcast_end, > > condition, > > LTTNG_UST_CALLER_IP()); > > > > thread_in_trace = > > 0; > > > > return retval; > > > > } > > > > Things I have tried: > > 1- Comment out pthread_cond_wait function --> segmentation fault > > 2- Comment out pthread_cond_signal and _broadcast --> stuck (I can see > the > > program is still running but nor forward progress is being made) compared > > to the case when the wrappers are not preloaded. > > 3- Comment out all tracepoint related code (basically the wrapper just > call > > the corresponding pthreads function) --> same results as points 1 and 2. > > > > Any idea what might be causing this or how I could debug this problem? > > > > Thank you very much in advance. > > > > Best Regards, > > Shehab > > > int pthread_cond_wait(pthread_cond_t *condition, pthread_mutex_t > *mutex) > > { > > > > > static int (*cond_wait)(pthread_cond_t *, pthread_mutex_t *); > > > int retval; > > > > > > if (!cond_wait) { > > > cond_wait = dlsym(RTLD_NEXT, "pthread_cond_wait"); > > > if (!cond_wait) { > > > if (thread_in_trace) { > > > abort(); > > > } > > > fprintf(stderr, "unable to initialize pthread wrapper > library.\n"); > > return EINVAL; > > > } > > > } > > > if (thread_in_trace) { > > > return cond_wait(condition, mutex); > > > } > > > > > > thread_in_trace = 1; > > > tracepoint(lttng_ust_pthread, pthread_cond_wait_begin, condition, > mutex, > > LTTNG_UST_CALLER_IP()); > > > retval = cond_wait(condition, mutex); > > > tracepoint(lttng_ust_pthread, pthread_cond_wait_end, condition, > mutex, > > LTTNG_UST_CALLER_IP()); > > > thread_in_trace = 0; > > > return retval; > > > } > > > > > > int pthread_cond_signal(pthread_cond_t *condition) > > > { > > > static int (*cond_signal)(pthread_cond_t *); > > > int retval; > > > > > > if (!cond_signal) { > > > cond_signal = dlsym(RTLD_NEXT, "pthread_cond_signal"); > > > if (!cond_signal) { > > > if (thread_in_trace) { > > > abort(); > > > } > > > fprintf(stderr, "unable to initialize pthread wrapper > library.\n"); > > return EINVAL; > > > } > > > } > > > if (thread_in_trace) { > > > return cond_signal(condition); > > > } > > > > > > thread_in_trace = 1; > > > tracepoint(lttng_ust_pthread, pthread_cond_signal_begin, condition, > > > LTTNG_UST_CALLER_IP()); > > > retval = cond_signal(condition); > > > tracepoint(lttng_ust_pthread, pthread_cond_signal_end, condition, > > > LTTNG_UST_CALLER_IP()); > > > thread_in_trace = 0; > > > return retval; > > > } > > > > > > int pthread_cond_broadcast(pthread_cond_t *condition) > > > { > > > static int (*cond_broadcast)(pthread_cond_t *); > > > int retval; > > > > > > if (!cond_broadcast) { > > > cond_broadcast = dlsym(RTLD_NEXT, "pthread_cond_broadcast"); > > > if (!cond_broadcast) { > > > if (thread_in_trace) { > > > abort(); > > > } > > > fprintf(stderr, "unable to initialize pthread wrapper > library.\n"); > > return EINVAL; > > > } > > > } > > > if (thread_in_trace) { > > > return cond_broadcast(condition); > > > } > > > > > > thread_in_trace = 1; > > > tracepoint(lttng_ust_pthread, pthread_cond_broadcast_begin, > condition, > > LTTNG_UST_CALLER_IP()); > > > retval = cond_broadcast(condition); > > > tracepoint(lttng_ust_pthread, pthread_cond_broadcast_end, condition, > > > LTTNG_UST_CALLER_IP()); > > > thread_in_trace = 0; > > > return retval; > > > } > > > _______________________________________________ > > lttng-dev mailing list > > lttng-dev@lists.lttng.org > > https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev > > > -- > Jonathan Rajotte-Julien > EfficiOS >
_______________________________________________ lttng-dev mailing list lttng-dev@lists.lttng.org https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev