OSDN Git Service

2002-10-17 Robert Collins <rbtcollins@hotmail.com>
authorrbcollins <rbcollins>
Thu, 17 Oct 2002 08:44:17 +0000 (08:44 +0000)
committerrbcollins <rbcollins>
Thu, 17 Oct 2002 08:44:17 +0000 (08:44 +0000)
        * thread.h (pthread_mutex::isGoodInitializerOrBadObject): Declare.
        * thread.cc (pthread_mutex::isGoodInitializerOrBadObject): Implement.
        (pthread_mutex::init): Use isGoodInitializerOrBadObject to avoid
        unneeded SEGV's during debugging.

winsup/cygwin/ChangeLog
winsup/cygwin/thread.cc
winsup/cygwin/thread.h

index 2143aec..4c170f2 100644 (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.
index 75dd7d3..bf44faa 100644 (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;
index c23e5a0..73e57ed 100644 (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 *);