64b398f4c6
Now that nxsem_wait_uninterruptible() returns an error when the thread is canceled, new logic is being executed. This revealed an existing error in pthread_cond_wait(). The nature of the error is as follows: * pthread_cond_wait() must atomically (1) release the mutex, (2) wait on the condition, and (3) re-establish the mutex. Errors can occur on any of these steps. In this case the ECANCELED error was (very correctly) reported by nxsem_wait_uninterruptible(). * However, logic in step (3) had a bug; it re-acquired the mutex, but then a bug in existing logic cause the mutex to be improperly initialized. Essentially, the wrong error status value was being testing. This resulted in a nonsequitar and errors reported by the OS test. This problem was found by apps/testing/ostest/pthread_cleanup.c |
||
---|---|---|
.. | ||
Make.defs | ||
pthread_cancel.c | ||
pthread_cleanup.c | ||
pthread_completejoin.c | ||
pthread_condbroadcast.c | ||
pthread_condsignal.c | ||
pthread_condtimedwait.c | ||
pthread_condwait.c | ||
pthread_create.c | ||
pthread_detach.c | ||
pthread_exit.c | ||
pthread_findjoininfo.c | ||
pthread_get_stackaddr_np.c | ||
pthread_get_stacksize_np.c | ||
pthread_getaffinity.c | ||
pthread_getschedparam.c | ||
pthread_getspecific.c | ||
pthread_initialize.c | ||
pthread_join.c | ||
pthread_keycreate.c | ||
pthread_keydelete.c | ||
pthread_kill.c | ||
pthread_mutex.c | ||
pthread_mutexconsistent.c | ||
pthread_mutexdestroy.c | ||
pthread_mutexinconsistent.c | ||
pthread_mutexinit.c | ||
pthread_mutextimedlock.c | ||
pthread_mutextrylock.c | ||
pthread_mutexunlock.c | ||
pthread_release.c | ||
pthread_setaffinity.c | ||
pthread_setschedparam.c | ||
pthread_setschedprio.c | ||
pthread_setspecific.c | ||
pthread_sigmask.c | ||
pthread.h |