#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; }