diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2006-03-22 20:38:26 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2006-03-22 20:38:26 +0000 |
commit | f352ebca02f15a8f6729bd72dcf7845ac4bff6f6 (patch) | |
tree | 8aa72d3f4389abe1eb0e79338d1a4c97bcd50e91 /winsup/cygwin/thread.cc | |
parent | 81010d21e6d40a76e9cdee849f21c90da5f54bec (diff) | |
download | cygnal-f352ebca02f15a8f6729bd72dcf7845ac4bff6f6.tar.gz cygnal-f352ebca02f15a8f6729bd72dcf7845ac4bff6f6.tar.bz2 cygnal-f352ebca02f15a8f6729bd72dcf7845ac4bff6f6.zip |
* thread.cc (pthread_mutex::is_good_initializer_or_bad_object): Delete.
(pthread_cond::is_good_initializer_or_bad_object): Delete.
(pthread_rwlock::is_good_initializer_or_bad_object): Delete.
(pthread_cond::init): Remove disabled code. Guard assignment to
object to initialize against access violation.
(pthread_rwlock::init): Ditto.
(pthread_mutex::init): Ditto.
Diffstat (limited to 'winsup/cygwin/thread.cc')
-rw-r--r-- | winsup/cygwin/thread.cc | 82 |
1 files changed, 27 insertions, 55 deletions
diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc index 7ae53d34a..ad9061952 100644 --- a/winsup/cygwin/thread.cc +++ b/winsup/cygwin/thread.cc @@ -195,17 +195,6 @@ pthread_mutex::is_good_initializer_or_object (pthread_mutex_t const *mutex) } inline bool -pthread_mutex::is_good_initializer_or_bad_object (pthread_mutex_t const *mutex) -{ - if (verifyable_object_isvalid (mutex, PTHREAD_MUTEX_MAGIC, - PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, - PTHREAD_NORMAL_MUTEX_INITIALIZER_NP, - PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP) == VALID_OBJECT) - return false; - return true; -} - -inline bool pthread_mutex::can_be_unlocked (pthread_mutex_t const *mutex) { pthread_t self = pthread::self (); @@ -260,14 +249,6 @@ pthread_cond::is_good_initializer_or_object (pthread_cond_t const *cond) return true; } -inline bool -pthread_cond::is_good_initializer_or_bad_object (pthread_cond_t const *cond) -{ - if (verifyable_object_isvalid (cond, PTHREAD_COND_MAGIC, PTHREAD_COND_INITIALIZER) == VALID_OBJECT) - return false; - return true; -} - /* RW locks */ inline bool pthread_rwlock::is_good_object (pthread_rwlock_t const *rwlock) @@ -294,14 +275,6 @@ pthread_rwlock::is_good_initializer_or_object (pthread_rwlock_t const *rwlock) } inline bool -pthread_rwlock::is_good_initializer_or_bad_object (pthread_rwlock_t const *rwlock) -{ - if (verifyable_object_isvalid (rwlock, PTHREAD_RWLOCK_MAGIC, PTHREAD_RWLOCK_INITIALIZER) == VALID_OBJECT) - return false; - return true; -} - -inline bool semaphore::is_good_object (sem_t const * sem) { if (verifyable_object_isvalid (sem, SEM_MAGIC) != VALID_OBJECT) @@ -2543,22 +2516,13 @@ pthread_cond_destroy (pthread_cond_t *cond) int pthread_cond::init (pthread_cond_t *cond, const pthread_condattr_t *attr) { - pthread_cond_t new_cond; if (attr && !pthread_condattr::is_good_object (attr)) return EINVAL; cond_initialization_lock.lock (); -#if 0 - /* Disabled since recognition of a valid object doesn't work reliably - if the object is uninitialized. */ - if (!is_good_initializer_or_bad_object (cond)) - { - cond_initialization_lock.unlock (); - return EBUSY; - } -#endif + new_cond = new pthread_cond (attr ? (*attr) : NULL); if (!is_good_object (&new_cond)) { @@ -2567,6 +2531,14 @@ pthread_cond::init (pthread_cond_t *cond, const pthread_condattr_t *attr) return EAGAIN; } + myfault efault; + if (efault.faulted ()) + { + delete new_cond; + cond_initialization_lock.unlock (); + return EINVAL; + } + *cond = new_cond; cond_initialization_lock.unlock (); @@ -2733,15 +2705,7 @@ pthread_rwlock::init (pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr return EINVAL; rwlock_initialization_lock.lock (); -#if 0 - /* Disabled since recognition of a valid object doesn't work reliably - if the object is uninitialized. */ - if (!is_good_initializer_or_bad_object (rwlock)) - { - rwlock_initialization_lock.unlock (); - return EBUSY; - } -#endif + new_rwlock = new pthread_rwlock (attr ? (*attr) : NULL); if (!is_good_object (&new_rwlock)) { @@ -2750,6 +2714,14 @@ pthread_rwlock::init (pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr return EAGAIN; } + myfault efault; + if (efault.faulted ()) + { + delete new_rwlock; + rwlock_initialization_lock.unlock (); + return EINVAL; + } + *rwlock = new_rwlock; rwlock_initialization_lock.unlock (); @@ -2913,15 +2885,7 @@ pthread_mutex::init (pthread_mutex_t *mutex, return EINVAL; mutex_initialization_lock.lock (); -#if 0 - /* Disabled since recognition of a valid object doesn't work reliably - if the object is uninitialized. */ - if (!is_good_initializer_or_bad_object (mutex)) - { - mutex_initialization_lock.unlock (); - return EBUSY; - } -#endif + new_mutex = new pthread_mutex (attr ? (*attr) : NULL); if (!is_good_object (&new_mutex)) { @@ -2940,6 +2904,14 @@ pthread_mutex::init (pthread_mutex_t *mutex, new_mutex->type = PTHREAD_MUTEX_ERRORCHECK; } + myfault efault; + if (efault.faulted ()) + { + delete new_mutex; + mutex_initialization_lock.unlock (); + return EINVAL; + } + *mutex = new_mutex; mutex_initialization_lock.unlock (); |