[compiler-rt] r224030 - [Tsan] Fix the signal_recursive.cc test to pass on systems with high loads

Viktor Kutuzov vkutuzov at accesssoftek.com
Thu Dec 11 09:42:29 PST 2014


Author: vkutuzov
Date: Thu Dec 11 11:42:29 2014
New Revision: 224030

URL: http://llvm.org/viewvc/llvm-project?rev=224030&view=rev
Log:
[Tsan] Fix the signal_recursive.cc test to pass on systems with high loads
Differential Revision: http://reviews.llvm.org/D6504

Added:
    compiler-rt/trunk/test/tsan/process_sleep.h
Modified:
    compiler-rt/trunk/test/tsan/signal_recursive.cc

Added: compiler-rt/trunk/test/tsan/process_sleep.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/process_sleep.h?rev=224030&view=auto
==============================================================================
--- compiler-rt/trunk/test/tsan/process_sleep.h (added)
+++ compiler-rt/trunk/test/tsan/process_sleep.h Thu Dec 11 11:42:29 2014
@@ -0,0 +1,7 @@
+#include <time.h>
+
+static void process_sleep(int sec) {
+  clock_t beg = clock();
+  while((clock() - beg) / CLOCKS_PER_SEC < sec)
+    usleep(100);
+}

Modified: compiler-rt/trunk/test/tsan/signal_recursive.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/signal_recursive.cc?rev=224030&r1=224029&r2=224030&view=diff
==============================================================================
--- compiler-rt/trunk/test/tsan/signal_recursive.cc (original)
+++ compiler-rt/trunk/test/tsan/signal_recursive.cc Thu Dec 11 11:42:29 2014
@@ -11,6 +11,8 @@
 #include <stdlib.h>
 #include <stdio.h>
 
+#include "process_sleep.h"
+
 static const int kSigSuspend = SIGUSR1;
 static const int kSigRestart = SIGUSR2;
 static sigset_t g_suspend_handler_mask;
@@ -59,33 +61,30 @@ static void RestartHandler(int sig) {
 }
 
 static void StopWorld(pthread_t thread) {
-  int result = pthread_kill(thread, kSigSuspend);
-  if (result != 0)
+  if (pthread_kill(thread, kSigSuspend) != 0)
     fail("pthread_kill failed");
 
-  while ((result = sem_wait(&g_thread_suspend_ack_sem)) != 0) {
-    if (result != EINTR) {
+  while (sem_wait(&g_thread_suspend_ack_sem) != 0) {
+    if (errno != EINTR)
       fail("sem_wait failed");
-    }
   }
 }
 
 static void StartWorld(pthread_t thread) {
-  int result = pthread_kill(thread, kSigRestart);
-  if (result != 0)
+  if (pthread_kill(thread, kSigRestart) != 0)
     fail("pthread_kill failed");
 
-  while ((result = sem_wait(&g_thread_suspend_ack_sem)) != 0) {
-    if (result != EINTR) {
+  while (sem_wait(&g_thread_suspend_ack_sem) != 0) {
+    if (errno != EINTR)
       fail("sem_wait failed");
-    }
   }
 }
 
 static void CollectGarbage(pthread_t thread) {
   StopWorld(thread);
   // Walk stacks
-    StartWorld(thread);
+  process_sleep(1);
+  StartWorld(thread);
 }
 
 static void Init() {
@@ -118,9 +117,11 @@ void* BusyThread(void *arg) {
 int main(int argc, const char *argv[]) {
   Init();
   pthread_t busy_thread;
-  pthread_create(&busy_thread, NULL, &BusyThread, NULL);
+  if (pthread_create(&busy_thread, NULL, &BusyThread, NULL) != 0)
+    fail("pthread_create failed");
   CollectGarbage(busy_thread);
-  pthread_join(busy_thread, 0);
+  if (pthread_join(busy_thread, 0) != 0)
+    fail("pthread_join failed");
   fprintf(stderr, "DONE\n");
   return 0;
 }





More information about the llvm-commits mailing list