/ test / tsan / ignore_lib_lib.h
ignore_lib_lib.h
 1  #include <pthread.h>
 2  #include <string.h>
 3  #include <stdlib.h>
 4  #include <stdio.h>
 5  #include <unistd.h>
 6  
 7  void *volatile mem;
 8  volatile int len;
 9  
10  void *Thread(void *p) {
11    while ((p = __atomic_load_n(&mem, __ATOMIC_ACQUIRE)) == 0)
12      usleep(100);
13    memset(p, 0, len);
14    return 0;
15  }
16  
17  extern "C" void libfunc() {
18    pthread_t t;
19    pthread_create(&t, 0, Thread, 0);
20    len = 10;
21    __atomic_store_n(&mem, malloc(len), __ATOMIC_RELEASE);
22    pthread_join(t, 0);
23    free(mem);
24    fprintf(stderr, "OK\n");
25  }