2002-10-17 Robert Collins <rbtcollins@hotmail.com>

* thread.h (pthread_mutex::isGoodInitializerOrBadObject): Declare.
        * thread.cc (pthread_mutex::isGoodInitializerOrBadObject): Implement.
        (pthread_mutex::init): Use isGoodInitializerOrBadObject to avoid
        unneeded SEGV's during debugging.
This commit is contained in:
Robert Collins 2002-10-17 08:44:18 +00:00
parent 841cf30bc3
commit e9350b6575
3 changed files with 18 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2002-10-17 Robert Collins <rbtcollins@hotmail.com>
* thread.h (pthread_mutex::isGoodInitializerOrBadObject): Declare.
* thread.cc (pthread_mutex::isGoodInitializerOrBadObject): Implement.
(pthread_mutex::init): Use isGoodInitializerOrBadObject to avoid
unneeded SEGV's during debugging.
2002-10-17 Thomas Pfaff <tpfaff@gmx.net>
* thread.cc (verifyable_object_isvalid): Test for static object first.

View File

@ -1098,6 +1098,15 @@ pthread_mutex::isGoodInitializerOrObject (pthread_mutex_t const *mutex)
return true;
}
bool
pthread_mutex::isGoodInitializerOrBadObject (pthread_mutex_t const *mutex)
{
verifyable_object_state objectState = verifyable_object_isvalid (mutex, PTHREAD_MUTEX_MAGIC, PTHREAD_MUTEX_INITIALIZER);
if (objectState == VALID_OBJECT)
return false;
return true;
}
/* This is used for mutex creation protection within a single process only */
pthread_mutex::nativeMutex pthread_mutex::mutexInitializationLock NO_COPY;
@ -2256,8 +2265,7 @@ pthread_mutex::init (pthread_mutex_t *mutex,
if (!mutexInitializationLock.lock ())
return EINVAL;
/* FIXME: bugfix: we should check *mutex being a valid address */
if (isGoodObject (mutex))
if (!isGoodInitializerOrBadObject (mutex))
{
mutexInitializationLock.unlock ();
return EBUSY;

View File

@ -291,6 +291,7 @@ public:
static bool isGoodObject(pthread_mutex_t const *);
static bool isGoodInitializer(pthread_mutex_t const *);
static bool isGoodInitializerOrObject(pthread_mutex_t const *);
static bool isGoodInitializerOrBadObject (pthread_mutex_t const *mutex);
static void initMutex ();
static int init (pthread_mutex_t *, const pthread_mutexattr_t *);