[PATCH] Implement `internal_start/join_thread` on Mac OS X

Ismail Pazarbasi ismail.pazarbasi at gmail.com
Mon Jun 22 09:57:24 PDT 2015


Allow only Mac OS X implementation of `internal_start_thread` and `internal_join_thread`


http://reviews.llvm.org/D9638

Files:
  lib/sanitizer_common/sanitizer_mac.cc

Index: lib/sanitizer_common/sanitizer_mac.cc
===================================================================
--- lib/sanitizer_common/sanitizer_mac.cc
+++ lib/sanitizer_common/sanitizer_mac.cc
@@ -353,8 +353,28 @@
   return info.resident_size;
 }
 
-void *internal_start_thread(void (*func)(void *arg), void *arg) { return 0; }
-void internal_join_thread(void *th) { }
+// FIXME: Move internal_start_thread and internal_join_thread from both Mac and
+// Linux into sanitizer_posix.cc.
+void *internal_start_thread(void(*func)(void *arg), void *arg) {
+#if TARGET_OS_MAC && !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR
+  // Start the thread with signals blocked, otherwise it can steal user signals.
+  __sanitizer_sigset_t set, old;
+  internal_sigfillset(&set);
+  internal_sigprocmask(SIG_SETMASK, &set, &old);
+  pthread_t th;
+  pthread_create(&th, 0, (void*(*)(void *arg))func, arg);
+  internal_sigprocmask(SIG_SETMASK, &old, 0);
+  return th;
+#else
+  return 0;
+#endif
+}
+
+void internal_join_thread(void *th) {
+#if TARGET_OS_MAC && !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR
+  pthread_join((pthread_t)th, 0);
+#endif
+}
 
 void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp) {
   ucontext_t *ucontext = (ucontext_t*)context;

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D9638.28123.patch
Type: text/x-patch
Size: 1255 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150622/75cf552a/attachment.bin>


More information about the llvm-commits mailing list