1
2#include <pthread.h>
3#include <stdio.h>
4#include <stdlib.h>
5#include <assert.h>
6
7/* The simplest possible test that triggers a lock order acquisition
8   error. */
9
10int main ( void )
11{
12   int r;
13   pthread_mutex_t mx1, mx2;
14   r = pthread_mutex_init( &mx1, NULL ); assert(r==0);
15   r = pthread_mutex_init( &mx2, NULL ); assert(r==0);
16
17   r = pthread_mutex_lock( &mx1 ); assert(r==0);
18   r = pthread_mutex_lock( &mx2 ); assert(r==0);
19
20   r = pthread_mutex_unlock( &mx1 ); assert(r==0);
21   r = pthread_mutex_unlock( &mx2 ); assert(r==0);
22
23   r = pthread_mutex_lock( &mx2 ); assert(r==0); /* error */
24   r = pthread_mutex_lock( &mx1 ); assert(r==0);
25
26   r = pthread_mutex_unlock( &mx1 ); assert(r==0);
27   r = pthread_mutex_unlock( &mx2 ); assert(r==0);
28
29   r = pthread_mutex_destroy( &mx1 );
30   r = pthread_mutex_destroy( &mx2 );
31
32   return 0;
33}
34