* 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.
This commit is contained in:
Corinna Vinschen 2006-03-22 20:38:26 +00:00
parent 81010d21e6
commit f352ebca02
2 changed files with 37 additions and 55 deletions

View File

@ -1,3 +1,13 @@
2006-03-22 Corinna Vinschen <corinna@vinschen.de>
* 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.
2006-03-22 Eric Blake <ebb9@byu.net>
* fhandler.cc (fcntl): Print flags in hex.

View File

@ -194,17 +194,6 @@ pthread_mutex::is_good_initializer_or_object (pthread_mutex_t const *mutex)
return true;
}
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)
{
@ -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)
@ -293,14 +274,6 @@ pthread_rwlock::is_good_initializer_or_object (pthread_rwlock_t const *rwlock)
return true;
}
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)
{
@ -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 ();