This patch should fix the segfault in pthread_mutex::init by changing the
test order for a valid object and checking for valid initializer object
first..

Thomas


2002-10-17  Thomas Pfaff  <[EMAIL PROTECTED]>

        * thread.cc (verifyable_object_isvalid): Test for static object first.
        (pthread_mutex::init): Add test for valid initializer object.
--- thread.cc.org       Sun Oct  6 03:00:23 2002
+++ thread.cc   Thu Oct 17 09:57:53 2002
@@ -1356,12 +1356,12 @@ verifyable_object_state
 verifyable_object_isvalid (void const * objectptr, long magic, void *static_ptr)
 {
   verifyable_object **object = (verifyable_object **)objectptr;
+  if (static_ptr && *object == static_ptr)
+    return VALID_STATIC_OBJECT;
   if (check_valid_pointer (object))
     return INVALID_OBJECT;
   if (!*object)
     return INVALID_OBJECT;
-  if (static_ptr && *object == static_ptr)
-    return VALID_STATIC_OBJECT;
   if (check_valid_pointer (*object))
     return INVALID_OBJECT;
   if ((*object)->magic != magic)
@@ -2257,7 +2257,8 @@ pthread_mutex::init (pthread_mutex_t *mu
     return EINVAL;
 
   /* FIXME: bugfix: we should check *mutex being a valid address */
-  if (isGoodObject (mutex))
+  if (!pthread_mutex::isGoodInitializer (mutex) &&
+      pthread_mutex::isGoodObject (mutex))
     {
       mutexInitializationLock.unlock ();
       return EBUSY;

Reply via email to