blob: c1ffa254a63a1a240d89ae2bffa9f690fa55a58c [file] [log] [blame]
sewardjb4112022007-11-09 22:49:28 +00001
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