xref: /llvm-project/lldb/test/API/functionalities/tsan/basic/main.c (revision a114f151930d29967963fd22f328a906638a2818)
199451b44SJordan Rupprecht #include <pthread.h>
299451b44SJordan Rupprecht #include <stdio.h>
399451b44SJordan Rupprecht #include <stdlib.h>
499451b44SJordan Rupprecht 
599451b44SJordan Rupprecht char *pointer;
699451b44SJordan Rupprecht 
f1(void * p)799451b44SJordan Rupprecht void *f1(void *p) {
899451b44SJordan Rupprecht     pointer[0] = 'x'; // thread1 line
999451b44SJordan Rupprecht     return NULL;
1099451b44SJordan Rupprecht }
1199451b44SJordan Rupprecht 
f2(void * p)1299451b44SJordan Rupprecht void *f2(void *p) {
1399451b44SJordan Rupprecht     pointer[0] = 'y'; // thread2 line
1499451b44SJordan Rupprecht     return NULL;
1599451b44SJordan Rupprecht }
1699451b44SJordan Rupprecht 
main(int argc,char const * argv[])1799451b44SJordan Rupprecht int main (int argc, char const *argv[])
1899451b44SJordan Rupprecht {
19*a114f151SDmitry Vyukov     for (int i = 0; i < 100; i++) {
2099451b44SJordan Rupprecht         pointer = (char *)malloc(10); // malloc line
2199451b44SJordan Rupprecht 
2299451b44SJordan Rupprecht         pthread_t t1, t2;
2399451b44SJordan Rupprecht         pthread_create(&t1, NULL, f1, NULL);
2499451b44SJordan Rupprecht         pthread_create(&t2, NULL, f2, NULL);
2599451b44SJordan Rupprecht 
2699451b44SJordan Rupprecht         pthread_join(t1, NULL);
2799451b44SJordan Rupprecht         pthread_join(t2, NULL);
2899451b44SJordan Rupprecht 
29*a114f151SDmitry Vyukov         free(pointer);
30*a114f151SDmitry Vyukov     }
3199451b44SJordan Rupprecht     return 0;
3299451b44SJordan Rupprecht }
33