mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 08:26:14 +00:00
40 lines
976 B
C
40 lines
976 B
C
#include <stdio.h>
|
|
#include <pthread.h>
|
|
#include <errno.h>
|
|
// test program from johan.walles (bug 295590)
|
|
// This test verifies that helgrind detects (and does not crash) when
|
|
// the guest application wrongly destroys a cond var being waited
|
|
// upon.
|
|
pthread_mutex_t mutex;
|
|
pthread_cond_t cond;
|
|
pthread_t thread;
|
|
int ready = 0;
|
|
|
|
void *ThreadFunction(void *ptr)
|
|
{
|
|
pthread_mutex_lock(&mutex);
|
|
ready = 1;
|
|
pthread_cond_signal(&cond);
|
|
pthread_cond_destroy(&cond); // ERROR!!!
|
|
pthread_mutex_unlock(&mutex);
|
|
return NULL;
|
|
}
|
|
|
|
int main()
|
|
{
|
|
pthread_mutex_init(&mutex, NULL);
|
|
pthread_cond_init(&cond, NULL);
|
|
|
|
pthread_mutex_lock(&mutex);
|
|
pthread_create(&thread, NULL, ThreadFunction, (void*) NULL);
|
|
while (!ready) { // to insure ourselves against spurious wakeups
|
|
pthread_cond_wait(&cond, &mutex);
|
|
}
|
|
pthread_mutex_unlock(&mutex);
|
|
|
|
pthread_join(thread, NULL);
|
|
pthread_mutex_destroy(&mutex);
|
|
printf("finished\n");
|
|
return 0;
|
|
}
|