#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
/* Delete memory that has a held lock and see what happens. */
typedef struct { int stuff[2000];
pthread_mutex_t lock; int morestuff[2000]; } XX;
void bar ( void );
void foo ( void );
int main ( void )
{
XX* xx = malloc(sizeof(XX));
assert(xx);
pthread_mutex_init( &xx->lock, NULL );
pthread_mutex_lock( &xx->lock );
free(xx);
bar();
foo();
bar();
return 0;
}
/* Try the same, on the stack */
void bar ( void )
{
pthread_mutex_t mx = PTHREAD_MUTEX_INITIALIZER;
// pthread_mutex_init( &mx, NULL );
pthread_mutex_lock( &mx );
/* now just abandon mx */
}
/* and again ... */
void foo ( void )
{
pthread_mutex_t mx;
pthread_mutex_init( &mx, NULL );
pthread_mutex_lock( &mx );
/* now just abandon mx */
}