#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
/* Test of the mechanism for showing all locks held by a thread -- one
thread has a lock, the other doesn't. Running w/ command line args
switches the has/has-not thread around, so as to test lockset
retention in both the history mechanism and the primary errors. */
pthread_mutex_t mx = PTHREAD_MUTEX_INITIALIZER;
int x = 0;
void* child_fn ( void* arg )
{
if (arg) pthread_mutex_lock(&mx);
x = 1;
if (arg) pthread_mutex_unlock(&mx);
return NULL;
}
int main ( int argc, char** argv )
{
int sw = argc > 1;
pthread_t child1, child2;
if (pthread_create(&child1, NULL, child_fn, (void*)(long)(sw ? 0 : 1))) {
perror("pthread_create1");
exit(1);
}
sleep(1); /* ensure repeatable results */
if (pthread_create(&child2, NULL, child_fn, (void*)(long)(sw ? 1 : 0))) {
perror("pthread_create1");
exit(1);
}
if (pthread_join(child1, NULL)) {
perror("pthread join1");
exit(1);
}
if (pthread_join(child2, NULL)) {
perror("pthread join2");
exit(1);
}
return 0;
}