1
2#include <pthread.h>
3#include <stdio.h>
4#include <stdlib.h>
5#include <unistd.h>
6
7/* Test of the mechanism for showing all locks held by a thread -- one
8   thread has a lock, the other doesn't.  Running w/ command line args
9   switches the has/has-not thread around, so as to test lockset
10   retention in both the history mechanism and the primary errors. */
11
12pthread_mutex_t mx = PTHREAD_MUTEX_INITIALIZER;
13
14int x = 0;
15
16void* child_fn ( void* arg )
17{
18   if (arg) pthread_mutex_lock(&mx);
19   x = 1;
20   if (arg) pthread_mutex_unlock(&mx);
21   return NULL;
22}
23
24int main ( int argc, char** argv )
25{
26   int sw = argc > 1;
27   pthread_t child1, child2;
28
29   if (pthread_create(&child1, NULL, child_fn, (void*)(long)(sw ? 0 : 1))) {
30      perror("pthread_create1");
31      exit(1);
32   }
33   sleep(1); /* ensure repeatable results */
34   if (pthread_create(&child2, NULL, child_fn, (void*)(long)(sw ? 1 : 0))) {
35      perror("pthread_create1");
36      exit(1);
37   }
38
39   if (pthread_join(child1, NULL)) {
40      perror("pthread join1");
41      exit(1);
42   }
43
44   if (pthread_join(child2, NULL)) {
45      perror("pthread join2");
46      exit(1);
47   }
48
49   return 0;
50}
51