]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/valgrind/src/valgrind-3.6.0-svn/drd/tests/annotate_ignore_write.c
Inital import
[l4.git] / l4 / pkg / valgrind / src / valgrind-3.6.0-svn / drd / tests / annotate_ignore_write.c
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
9 static int s_a;
10 static int s_b;
11 static int s_c;
12
13 static 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
23 int 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 }