[hwasan] revert r341435 as it breaks the bot on aarch64
authorKostya Serebryany <kcc@google.com>
Wed, 5 Sep 2018 01:29:08 +0000 (01:29 +0000)
committerKostya Serebryany <kcc@google.com>
Wed, 5 Sep 2018 01:29:08 +0000 (01:29 +0000)
llvm-svn: 341441

compiler-rt/lib/hwasan/hwasan_linux.cc

index 36ebc9b..3285431 100644 (file)
@@ -221,25 +221,23 @@ extern "C" void __hwasan_thread_exit() {
   Thread *t = GetCurrentThread();
   // Make sure that signal handler can not see a stale current thread pointer.
   atomic_signal_fence(memory_order_seq_cst);
-  CHECK(t);
-  t->Destroy();
+  if (t)
+    t->Destroy();
 }
 
 #if HWASAN_WITH_INTERCEPTORS
 static pthread_key_t tsd_key;
 static bool tsd_key_inited = false;
 
-static THREADLOCAL Thread *current_thread;
-
 void HwasanTSDDtor(void *tsd) {
-  Thread *t = current_thread;
+  Thread *t = (Thread*)tsd;
   if (t->destructor_iterations_ > 1) {
     t->destructor_iterations_--;
-    CHECK_EQ(0, pthread_setspecific(tsd_key, (void*)1));
+    CHECK_EQ(0, pthread_setspecific(tsd_key, tsd));
     return;
   }
+  t->Destroy();
   __hwasan_thread_exit();
-  current_thread = nullptr;
 }
 
 void HwasanTSDInit() {
@@ -249,17 +247,15 @@ void HwasanTSDInit() {
 }
 
 Thread *GetCurrentThread() {
-  return current_thread;
+  return (Thread *)pthread_getspecific(tsd_key);
 }
 
 void SetCurrentThread(Thread *t) {
   // Make sure that HwasanTSDDtor gets called at the end.
   CHECK(tsd_key_inited);
   // Make sure we do not reset the current Thread.
-  CHECK_EQ(current_thread, nullptr);
-  current_thread = t;
   CHECK_EQ(0, pthread_getspecific(tsd_key));
-  CHECK_EQ(0, pthread_setspecific(tsd_key, (void *)1));
+  pthread_setspecific(tsd_key, (void *)t);
 }
 #elif SANITIZER_ANDROID
 void HwasanTSDInit() {}