I was wondering if you had a chance to look over this issue. Thanks! 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 Thu, May 3, 2018 at 4:37 PM, Shehab Elsayed <shehaby...@gmail.com> wrote: > 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