annotate_ignore_write.c revision 9bea4c13fca0e3bb4b719dcb3ed63d47d479294e
1/* Test program for the annotations that suppress write operations. */ 2 3#include <assert.h> /* assert() */ 4#include <pthread.h> 5#include <stdio.h> /* EOF */ 6#include <unistd.h> /* getopt() */ 7#include "../../drd/drd.h" 8 9static int s_a; 10static int s_b; 11static int s_c; 12 13static void* thread_func(void* arg) 14{ 15 /* Read s_a and modify s_b. */ 16 s_b = s_a; 17 /* Modify s_c. */ 18 s_c = 1; 19 20 return NULL; 21} 22 23int main(int argc, char** argv) 24{ 25 int optchar; 26 int ign_rw = 1; 27 pthread_t tid; 28 29 while ((optchar = getopt(argc, argv, "r")) != EOF) 30 { 31 switch (optchar) 32 { 33 case 'r': 34 ign_rw = 0; 35 break; 36 default: 37 assert(0); 38 } 39 } 40 41 pthread_create(&tid, 0, thread_func, 0); 42 if (ign_rw) 43 ANNOTATE_IGNORE_WRITES_BEGIN(); 44 /* Read s_b and modify s_a. */ 45 s_a = s_b; 46 if (ign_rw) 47 ANNOTATE_IGNORE_WRITES_END(); 48 49 /* 50 * Insert a delay here in order to make sure the load of s_c happens 51 * after s_c has been modified. 52 */ 53 sleep(1); 54 55 /* Read s_c and modify s_a. */ 56 s_a = s_c; 57 58 pthread_join(tid, 0); 59 60 fprintf(stderr, "Finished.\n"); 61 62 return 0; 63} 64