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