Home | History | Annotate | Download | only in tests
      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 
     12 pthread_mutex_t mx = PTHREAD_MUTEX_INITIALIZER;
     13 
     14 int x = 0;
     15 
     16 void* 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 
     24 int 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