Opened 15 years ago
Closed 15 years ago
#4064 closed bug (fixed)
[patch]cond_wait always return EAGAIN with an unitialized pthread_cond_t (pthread_cond.c)
Reported by: | oco | Owned by: | axeld |
---|---|---|---|
Priority: | normal | Milestone: | R1 |
Component: | - General | Version: | R1/pre-alpha1 |
Keywords: | Cc: | ||
Blocked By: | Blocking: | ||
Platform: | All |
Description
cond_wait always return EAGAIN with an unitialized pthread_cond_t (pthread_cond.c).
This function is used by pthread_cond_wait and pthread_cond_timedwait.
I discover the problem while trying to compile current ruby trunk (1.9). miniruby (a reduced version of ruby used in the build process) stop while calling pthread_cond_timedwait. The return value is always EAGAIN. I use hrev31395 of haiku.
After looking at the source code, i think we should check the return value of create_sem instead of cond->sem. This is what is in the first patch.
I found similar code in mutex_lock (pthread_mutex.c). Maybe, we should also use atomic_test_and_set to assign cond->sem. This is what is added in the second patch. But, as i am not sure of what i am proposing (i am a newbie with threads), careful revue is needed.
First patch