diff --git a/repos/libports/src/lib/libc/pthread.cc b/repos/libports/src/lib/libc/pthread.cc index 37b03c0e15..09d0b1710a 100644 --- a/repos/libports/src/lib/libc/pthread.cc +++ b/repos/libports/src/lib/libc/pthread.cc @@ -903,9 +903,12 @@ extern "C" { int pthread_cond_destroy(pthread_cond_t *cond) { - if (!cond || !*cond) + if (!cond) return EINVAL; + if (*cond == PTHREAD_COND_INITIALIZER) + return 0; + Libc::Allocator alloc { }; destroy(alloc, *cond); *cond = 0; @@ -967,9 +970,12 @@ extern "C" { int pthread_cond_signal(pthread_cond_t *cond) { - if (!cond || !*cond) + if (!cond) return EINVAL; + if (*cond == PTHREAD_COND_INITIALIZER) + cond_init(cond, NULL); + pthread_cond *c = *cond; pthread_mutex_lock(&c->counter_mutex); @@ -987,9 +993,12 @@ extern "C" { int pthread_cond_broadcast(pthread_cond_t *cond) { - if (!cond || !*cond) + if (!cond) return EINVAL; + if (*cond == PTHREAD_COND_INITIALIZER) + cond_init(cond, NULL); + pthread_cond *c = *cond; pthread_mutex_lock(&c->counter_mutex);