1
2#include <pthread.h>
3#include <stdio.h>
4#include <stdlib.h>
5#include <assert.h>
6
7/* Delete memory that has a held lock and see what happens. */
8
9typedef struct { int stuff[2000];
10                 pthread_mutex_t lock; int morestuff[2000]; } XX;
11
12void bar ( void );
13void foo ( void );
14
15int main ( void )
16{
17   XX* xx = malloc(sizeof(XX));
18   assert(xx);
19
20   pthread_mutex_init( &xx->lock, NULL );
21
22   pthread_mutex_lock( &xx->lock );
23
24   free(xx);
25
26   bar();
27   foo();
28   bar();
29
30   return 0;
31}
32
33/* Try the same, on the stack */
34void bar ( void )
35{
36  pthread_mutex_t mx = PTHREAD_MUTEX_INITIALIZER;
37  //  pthread_mutex_init( &mx, NULL );
38  pthread_mutex_lock( &mx );
39  /* now just abandon mx */
40}
41
42/* and again ... */
43void foo ( void )
44{
45  pthread_mutex_t mx;
46  pthread_mutex_init( &mx, NULL );
47  pthread_mutex_lock( &mx );
48  /* now just abandon mx */
49}
50
51