LibC: Fix pthread_cond_timedwait

If timeout occurred, I was not removing the entry from block list
This commit is contained in:
2026-04-05 11:31:16 +03:00
parent db0507e670
commit 1eebe85071

View File

@@ -1166,16 +1166,14 @@ int pthread_cond_timedwait(pthread_cond_t* __restrict cond, pthread_mutex_t* __r
pthread_mutex_unlock(mutex); pthread_mutex_unlock(mutex);
while (BAN::atomic_load(block.futex) == 0) int ret = 0;
while (ret == 0 && BAN::atomic_load(block.futex) == 0)
{ {
const int op = FUTEX_WAIT const int op = FUTEX_WAIT
| (cond->attr.shared ? 0 : FUTEX_PRIVATE) | (cond->attr.shared ? 0 : FUTEX_PRIVATE)
| (cond->attr.clock == CLOCK_REALTIME ? FUTEX_REALTIME : 0); | (cond->attr.clock == CLOCK_REALTIME ? FUTEX_REALTIME : 0);
if (futex(op, &block.futex, 0, abstime) == -1 && errno == ETIMEDOUT) if (futex(op, &block.futex, 0, abstime) == -1 && errno == ETIMEDOUT)
{ ret = ETIMEDOUT;
pthread_mutex_lock(mutex);
return ETIMEDOUT;
}
} }
pthread_spin_lock(&cond->lock); pthread_spin_lock(&cond->lock);
@@ -1191,7 +1189,7 @@ int pthread_cond_timedwait(pthread_cond_t* __restrict cond, pthread_mutex_t* __r
pthread_spin_unlock(&cond->lock); pthread_spin_unlock(&cond->lock);
pthread_mutex_lock(mutex); pthread_mutex_lock(mutex);
return 0; return ret;
} }
int pthread_barrierattr_destroy(pthread_barrierattr_t* attr) int pthread_barrierattr_destroy(pthread_barrierattr_t* attr)