<div dir="ltr">Can a signal be delivered to the child during startup?  I've observed this in DR and it gave me a lot of pain.  Maybe a more robust way to do this would be to:<div><br><div>1. block signals in parent, save old sigset</div>
<div>2. spawn child thread with signals blocked (I think it uses the parent's set?)</div><div>3. unblock signals in the parent</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Oct 28, 2013 at 8:29 AM, Dmitry Vyukov <span dir="ltr"><<a href="mailto:dvyukov@google.com" target="_blank">dvyukov@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: dvyukov<br>
Date: Mon Oct 28 07:29:32 2013<br>
New Revision: 193519<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=193519&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=193519&view=rev</a><br>
Log:<br>
tsan: start the background thread with signals blocked, otherwise it can steal users signals<br>
<br>
<br>
Modified:<br>
    compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc?rev=193519&r1=193518&r2=193519&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc?rev=193519&r1=193518&r2=193519&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc Mon Oct 28 07:29:32 2013<br>
@@ -2191,9 +2191,15 @@ void InitializeInterceptors() {<br>
 }<br>
<br>
 void internal_start_thread(void(*func)(void *arg), void *arg) {<br>
+  // Start the thread with signals blocked, otherwise it can steal users<br>
+  // signals.<br>
+  __sanitizer_kernel_sigset_t set, old;<br>
+  internal_sigfillset(&set);<br>
+  internal_sigprocmask(SIG_SETMASK, &set, &old);<br>
   void *th;<br>
   REAL(pthread_create)(&th, 0, (void*(*)(void *arg))func, arg);<br>
   REAL(pthread_detach)(th);<br>
+  internal_sigprocmask(SIG_SETMASK, &old, 0);<br>
 }<br>
<br>
 }  // namespace __tsan<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>