Home | History | Annotate | Download | only in Darwin
      1 // RUN: %clang_tsan %s -o %t -framework Foundation
      2 // RUN: %env_tsan_opts=ignore_interceptors_accesses=1 %run %t 2>&1 | FileCheck %s
      3 
      4 #import <Foundation/Foundation.h>
      5 
      6 long global;
      7 
      8 void handler(void *arg) {
      9   fprintf(stderr, "global = %ld\n", global);
     10 
     11   dispatch_sync(dispatch_get_main_queue(), ^{
     12     CFRunLoopStop(CFRunLoopGetCurrent());
     13   });
     14 }
     15 
     16 int main(int argc, const char *argv[]) {
     17   dispatch_queue_t queue =
     18       dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT);
     19 
     20   dispatch_source_t source =
     21       dispatch_source_create(DISPATCH_SOURCE_TYPE_SIGNAL, SIGHUP, 0, queue);
     22 
     23   global = 42;
     24 
     25   dispatch_source_set_registration_handler_f(source, handler);
     26 
     27   dispatch_resume(source);
     28 
     29   CFRunLoopRun();
     30 
     31   return 0;
     32 }
     33 
     34 // CHECK: global = 42
     35 // CHECK-NOT: WARNING: ThreadSanitizer
     36