<div dir="ltr">Hi,<div><br></div><div>I am facing a deadlock in lttng-ust. Though my version is 2.6 I can see that this is applicable to the the latest UST version also.</div><div><br></div><div>Deadlocks happening due to these two flows</div><div>1. <span style="font-size:10.5pt;font-family:Calibri,sans-serif;color:black">lttng_fix_pending_events () -><b> </b></span><span style="color:black;font-family:Calibri,sans-serif;font-size:10.5pt">ustcomm_register_event () -> calloc() -> </span><span style="color:black;font-family:Calibri,sans-serif;font-size:10.5pt">__GI___dl_iterate_phdr()</span></div><div><span style="color:black;font-family:Calibri,sans-serif;font-size:10.5pt">     Note that Im not using the libc wrapper, but using a proprietary version for malloc() family which can call </span><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">__GI___dl_iterate_phdr()</span><span style="color:black;font-family:Calibri,sans-serif;font-size:10.5pt"> .</span></div><div><span style="color:black;font-family:Calibri,sans-serif;font-size:10.5pt">     This flow takes up UST_LOCK() before calling </span><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">__GI___dl_iterate_phdr(), and </span><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">__GI___dl_iterate_phdr() has its own mutex( lets say DL_MUTEX).</span></div><div><font color="#000000" face="Calibri, sans-serif"><span style="font-size:14px">2. lttng_ust_baddr_statedump() calls </span></font><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px"> </span><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">__GI___dl_iterate_phdr() which first takes up DL_MUTEX and then takes the UST_LOCK() in the call back function as </span><font color="#000000" face="Calibri, sans-serif"><span style="font-size:14px">extract_soinfo_events()->trace_baddr()->UST_LOCK()</span></font><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">.</span></div><div><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px"><br></span></div><div><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">Since the order is reversed, it can lead to deadlock. To fix this, do you think taking UST_LOCK in </span><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px"> lttng_ust_baddr_statedump() ( surrounding </span><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">__GI___dl_iterate_phdr() call ) instead of the call back function is proper ?</span></div><div><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px"><br></span></div><div><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">In the latest version of UST, I see some changes/refactoring and that the UST_LOCK has been removed from trace_baddr() and moved one call up, but still is being called in the call back function after </span><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">__GI___dl_iterate_phdr() is called.</span></div><div><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px"><br></span></div><div><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px"><br></span></div><div><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">Regards,</span></div><div><span style="color:rgb(0,0,0);font-family:Calibri,sans-serif;font-size:14px">Aravind.</span></div></div>