Author: bart
Date: 2008-03-01 15:27:41 +0000 (Sat, 01 Mar 2008)
New Revision: 7524

Log:
Converted double mutex error messages into single error messages.

Modified:
   trunk/exp-drd/drd_clientreq.c
   trunk/exp-drd/drd_clientreq.h
   trunk/exp-drd/drd_cond.c
   trunk/exp-drd/drd_intercepts.c
   trunk/exp-drd/drd_main.c
   trunk/exp-drd/drd_mutex.c
   trunk/exp-drd/drd_mutex.h
   trunk/exp-drd/drd_track.h
   trunk/exp-drd/tests/tc09_bad_unlock.stderr.exp
   trunk/exp-drd/tests/tc20_verifywrap.stderr.exp2
   trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp2
   trunk/exp-drd/tests/tc23_bogus_condwait.stderr.exp


Modified: trunk/exp-drd/drd_clientreq.c
===================================================================
--- trunk/exp-drd/drd_clientreq.c       2008-03-01 13:55:33 UTC (rev 7523)
+++ trunk/exp-drd/drd_clientreq.c       2008-03-01 15:27:41 UTC (rev 7524)
@@ -60,12 +60,12 @@
    cond_pre_wait(cond, cond_size, mutex);
 }
 
-static void drd_post_cond_wait(const Addr cond, const Addr mutex,
-                               const SizeT size, const MutexT mutex_type,
+static void drd_post_cond_wait(const Addr cond,
+                               const Addr mutex,
                                const Bool took_lock)
 {
    cond_post_wait(cond);
-   mutex_post_lock(mutex, size, mutex_type, took_lock);
+   mutex_post_lock(mutex, took_lock);
 }
 
 static void drd_pre_cond_signal(const Addr cond)
@@ -133,16 +133,15 @@
       break;
 
    case VG_USERREQ__PRE_PTHREAD_MUTEX_LOCK:
-      drd_pre_mutex_lock(thread_get_running_tid(), arg[1], arg[2], arg[3]);
+      drd_pre_mutex_lock(arg[1], arg[2], arg[3]);
       break;
 
    case VG_USERREQ__POST_PTHREAD_MUTEX_LOCK:
-      drd_post_mutex_lock(thread_get_running_tid(),
-                          arg[1], arg[2], arg[3], arg[4]);
+      drd_post_mutex_lock(arg[1], arg[2]);
       break;
 
    case VG_USERREQ__PRE_PTHREAD_MUTEX_UNLOCK:
-      drd_pre_mutex_unlock(thread_get_running_tid(), arg[1], arg[3]);
+      drd_pre_mutex_unlock(arg[1], arg[3]);
       break;
 
    case VG_USERREQ__SPIN_INIT_OR_UNLOCK:
@@ -163,9 +162,7 @@
       break;
 
    case VG_USERREQ__POST_PTHREAD_COND_WAIT:
-      drd_post_cond_wait(arg[1]/*cond*/, arg[2]/*mutex*/,
-                         arg[3]/*mutex_size*/, arg[4]/*mutex_type*/,
-                         arg[5]/*took_lock*/);
+      drd_post_cond_wait(arg[1]/*cond*/, arg[2]/*mutex*/, arg[3]/*took_lock*/);
       break;
 
    case VG_USERREQ__PRE_PTHREAD_COND_SIGNAL:
@@ -216,6 +213,27 @@
       drd_barrier_post_wait(thread_get_running_tid(), arg[1], arg[2]);
       break;
 
+   case VG_USERREQ__PRE_RWLOCK_INIT:
+      break;
+
+   case VG_USERREQ__POST_RWLOCK_DESTROY:
+      break;
+
+   case VG_USERREQ__PRE_RWLOCK_RDLOCK:
+      break;
+
+   case VG_USERREQ__POST_RWLOCK_RDLOCK:
+      break;
+
+   case VG_USERREQ__PRE_RWLOCK_WRLOCK:
+      break;
+
+   case VG_USERREQ__POST_RWLOCK_WRLOCK:
+      break;
+
+   case VG_USERREQ__POST_RWLOCK_UNLOCK:
+      break;
+
    default:
       VG_(message)(Vg_DebugMsg, "Unrecognized client request 0x%lx 0x%lx",
                    arg[0], arg[1]);

Modified: trunk/exp-drd/drd_clientreq.h
===================================================================
--- trunk/exp-drd/drd_clientreq.h       2008-03-01 13:55:33 UTC (rev 7523)
+++ trunk/exp-drd/drd_clientreq.h       2008-03-01 15:27:41 UTC (rev 7524)
@@ -54,7 +54,7 @@
   /* args: Addr, SizeT, MutexT */
   /* to notify the drd tool of pthread_mutex_lock calls */
   VG_USERREQ__POST_PTHREAD_MUTEX_LOCK,
-  /* args: Addr, SizeT, MutexT, Bool */
+  /* args: Addr, Bool */
   /* to notify the drd tool of pthread_mutex_unlock calls */
   VG_USERREQ__PRE_PTHREAD_MUTEX_UNLOCK,
   /* args: Addr */
@@ -71,7 +71,7 @@
   VG_USERREQ__PRE_PTHREAD_COND_WAIT,
   /* args: Addr cond, SizeT cond_size, Addr mutex, MutexT mt */
   VG_USERREQ__POST_PTHREAD_COND_WAIT,
-  /* args: Addr cond, Addr mutex, SizeT mutex_size, MutexT mt, Bool took_lock*/
+  /* args: Addr cond, Addr mutex, Bool took_lock*/
   VG_USERREQ__PRE_PTHREAD_COND_SIGNAL,
   /* args: Addr cond */
   VG_USERREQ__PRE_PTHREAD_COND_BROADCAST,
@@ -109,6 +109,28 @@
   VG_USERREQ__POST_BARRIER_WAIT,
   /* args: Addr barrier, Word has_waited */
 
+  /* To notify the drd tool of a pthread_rwlock_init call. */
+  VG_USERREQ__PRE_RWLOCK_INIT,
+  /* args: Addr rwlock, SizeT size */
+  /* To notify the drd tool of a pthread_rwlock_destroy call. */
+  VG_USERREQ__POST_RWLOCK_DESTROY,
+  /* args: Addr rwlock, SizeT size */
+  /* To notify the drd tool of a pthread_rwlock_rdlock call. */
+  VG_USERREQ__PRE_RWLOCK_RDLOCK,
+  /* args: Addr rwlock, SizeT size */
+  /* To notify the drd tool of a pthread_rwlock_rdlock call. */
+  VG_USERREQ__POST_RWLOCK_RDLOCK,
+  /* args: Addr rwlock, Bool took_lock */
+  /* To notify the drd tool of a pthread_rwlock_wrlock call. */
+  VG_USERREQ__PRE_RWLOCK_WRLOCK,
+  /* args: Addr rwlock, SizeT size */
+  /* To notify the drd tool of a pthread_rwlock_wrlock call. */
+  VG_USERREQ__POST_RWLOCK_WRLOCK,
+  /* args: Addr rwlock, Bool took_lock */
+  /* To notify the drd tool of a pthread_rwlock_unlock call. */
+  VG_USERREQ__POST_RWLOCK_UNLOCK,
+  /* args: Addr rwlock, Bool unlocked */
+
 };
 
 typedef enum

Modified: trunk/exp-drd/drd_cond.c
===================================================================
--- trunk/exp-drd/drd_cond.c    2008-03-01 13:55:33 UTC (rev 7523)
+++ trunk/exp-drd/drd_cond.c    2008-03-01 15:27:41 UTC (rev 7524)
@@ -228,7 +228,9 @@
   }
 
   p = cond_get(cond);
+  // To do: print a proper error message if the assert below fails.
   tl_assert(p);
+  // To do: print a proper error message if the assert below fails.
   tl_assert(p->waiter_count > 0);
   tl_assert(p->mutex);
   if (--p->waiter_count == 0)

Modified: trunk/exp-drd/drd_intercepts.c
===================================================================
--- trunk/exp-drd/drd_intercepts.c      2008-03-01 13:55:33 UTC (rev 7523)
+++ trunk/exp-drd/drd_intercepts.c      2008-03-01 15:27:41 UTC (rev 7524)
@@ -335,8 +335,7 @@
 #endif
    CALL_FN_W_W(ret, fn, mutex);
    VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__POST_PTHREAD_MUTEX_LOCK,
-                              mutex, sizeof(*mutex), mutex_type(mutex),
-                              ret == 0, 0);
+                              mutex, ret == 0, 0, 0, 0);
    return ret;
 }
 
@@ -348,10 +347,11 @@
    int   res;
    OrigFn fn;
    VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__PRE_PTHREAD_MUTEX_LOCK,
+                              mutex, sizeof(*mutex), mutex_type(mutex), 0, 0);
    CALL_FN_W_W(ret, fn, mutex);
    VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_PTHREAD_MUTEX_LOCK,
-                              mutex, sizeof(*mutex), mutex_type(mutex),
-                              ret == 0, 0);
+                              mutex, ret == 0, 0, 0, 0);
    return ret;
 }
 
@@ -364,10 +364,11 @@
    int   res;
    OrigFn fn;
    VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__PRE_PTHREAD_MUTEX_LOCK,
+                              mutex, sizeof(*mutex), mutex_type(mutex), 0, 0);
    CALL_FN_W_WW(ret, fn, mutex, abs_timeout);
    VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_PTHREAD_MUTEX_LOCK,
-                              mutex, sizeof(*mutex), mutex_type(mutex),
-                              ret == 0, 0);
+                              mutex, ret == 0, 0, 0, 0);
    return ret;
 }
 
@@ -429,8 +430,7 @@
                               0);
    CALL_FN_W_WW(ret, fn, cond, mutex);
    VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_PTHREAD_COND_WAIT,
-                              cond, mutex, sizeof(*mutex), mutex_type(mutex),
-                              ret == 0);
+                              cond, mutex, ret == 0, 0, 0);
    return ret;
 }
 
@@ -449,8 +449,7 @@
                               0);
    CALL_FN_W_WWW(ret, fn, cond, mutex, abstime);
    VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_PTHREAD_COND_WAIT,
-                              cond, mutex, sizeof(*mutex), mutex_type(mutex),
-                              ret == 0);
+                              cond, mutex, ret == 0, 0, 0);
    return ret;
 }
 
@@ -521,10 +520,12 @@
    int   res;
    OrigFn fn;
    VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__PRE_PTHREAD_MUTEX_LOCK,
+                              spinlock, sizeof(*spinlock), mutex_type_spinlock,
+                              0, 0);
    CALL_FN_W_W(ret, fn, spinlock);
    VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_PTHREAD_MUTEX_LOCK,
-                              spinlock, sizeof(*spinlock),
-                              mutex_type_spinlock, ret == 0, 0);
+                              spinlock, ret == 0, 0, 0, 0);
    return ret;
 }
 
@@ -536,10 +537,12 @@
    int   res;
    OrigFn fn;
    VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__PRE_PTHREAD_MUTEX_LOCK,
+                              spinlock, sizeof(*spinlock), mutex_type_spinlock,
+                              0, 0);
    CALL_FN_W_W(ret, fn, spinlock);
    VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_PTHREAD_MUTEX_LOCK,
-                              spinlock, sizeof(*spinlock),
-                              mutex_type_spinlock, ret == 0, 0);
+                              spinlock, ret == 0, 0, 0, 0);
    return ret;
 }
 
@@ -612,7 +615,7 @@
 typedef struct { long int sem_status; } sem_t_glibc_2_0;
 
 // sem_init
-PTH_FUNC(int, sem_initZAGLIBCZu2Zd0, // [EMAIL PROTECTED]
+PTH_FUNC(int, semZuinitZAGLIBCZu2Zd0, // [EMAIL PROTECTED]
               sem_t_glibc_2_0 *sem,
               int pshared,
               unsigned int value)
@@ -631,7 +634,7 @@
    return ret;
 }
 
-PTH_FUNC(int, sem_initZa, // sem_init*
+PTH_FUNC(int, semZuinitZa, // sem_init*
               sem_t *sem,
               int pshared,
               unsigned int value)
@@ -651,7 +654,7 @@
 }
 
 // sem_destroy
-PTH_FUNC(int, sem_destroyZAGLIBCZu2Zd0, // [EMAIL PROTECTED]
+PTH_FUNC(int, semZudestroyZAGLIBCZu2Zd0, // [EMAIL PROTECTED]
               sem_t_glibc_2_0 *sem)
 {
    int   ret;
@@ -667,7 +670,7 @@
    return ret;
 }
 
-PTH_FUNC(int, sem_destroyZa, // sem_destroy*
+PTH_FUNC(int, semZudestroyZa, // sem_destroy*
               sem_t *sem)
 {
    int   ret;
@@ -684,7 +687,7 @@
 }
 
 // sem_wait
-PTH_FUNC(int, sem_waitZAGLIBCZu2Zd0, // [EMAIL PROTECTED]
+PTH_FUNC(int, semZuwaitZAGLIBCZu2Zd0, // [EMAIL PROTECTED]
               sem_t_glibc_2_0 *sem)
 {
    int   ret;
@@ -700,7 +703,7 @@
 }
 
 // sem_wait
-PTH_FUNC(int, sem_waitZa, // sem_wait*
+PTH_FUNC(int, semZuwaitZa, // sem_wait*
               sem_t *sem)
 {
    int   ret;
@@ -716,7 +719,7 @@
 }
 
 // sem_trywait
-PTH_FUNC(int, sem_trywaitZAGLIBCZu2Zd0, // [EMAIL PROTECTED]
+PTH_FUNC(int, semZutrywaitZAGLIBCZu2Zd0, // [EMAIL PROTECTED]
               sem_t_glibc_2_0 *sem)
 {
    int   ret;
@@ -731,7 +734,7 @@
    return ret;
 }
 
-PTH_FUNC(int, sem_trywaitZa, // sem_trywait*
+PTH_FUNC(int, semZutrywaitZa, // sem_trywait*
               sem_t *sem)
 {
    int   ret;
@@ -747,7 +750,7 @@
 }
 
 // sem_timedwait
-PTH_FUNC(int, sem_timedwait, // sem_timedwait
+PTH_FUNC(int, semZutimedwait, // sem_timedwait
               sem_t *sem, const struct timespec *abs_timeout)
 {
    int   ret;
@@ -763,7 +766,7 @@
 }
 
 // sem_post
-PTH_FUNC(int, sem_postZAGLIBCZu2Zd0, // [EMAIL PROTECTED]
+PTH_FUNC(int, semZupostZAGLIBCZu2Zd0, // [EMAIL PROTECTED]
               sem_t_glibc_2_0 *sem)
 {
    int   ret;
@@ -778,7 +781,8 @@
    return ret;
 }
 
-PTH_FUNC(int, sem_postZa, // sem_post*
+// sem_post
+PTH_FUNC(int, semZupostZa, // sem_post*
               sem_t *sem)
 {
    int   ret;
@@ -793,24 +797,155 @@
    return ret;
 }
 
-/*
-pthread_rwlock_destroy
-pthread_rwlock_init
-pthread_rwlock_rdlock
-pthread_rwlock_timedrdlock
-pthread_rwlock_timedwrlock
-pthread_rwlock_tryrdlock
-pthread_rwlock_trywrlock
-pthread_rwlock_unlock
-pthread_rwlock_wrlock
-pthread_rwlockattr_destroy
-pthread_rwlockattr_getkind_np
-pthread_rwlockattr_getpshared
-pthread_rwlockattr_init
-pthread_rwlockattr_setkind_np
-pthread_rwlockattr_setpshared
- */
+// pthread_rwlock_init
+PTH_FUNC(int,
+         pthreadZurwlockZuinitZa, // pthread_rwlock_init*
+         pthread_rwlock_t* rwlock,
+         const pthread_rwlockattr_t* attr)
+{
+   int   ret;
+   int   res;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_RWLOCK_INIT,
+                              rwlock, sizeof(*rwlock), 0, 0, 0);
+   CALL_FN_W_WW(ret, fn, rwlock, attr);
+   return ret;
+}
 
+// pthread_rwlock_destroy
+PTH_FUNC(int,
+         pthreadZurwlockZudestroyZa, // pthread_rwlock_destroy*
+         pthread_rwlock_t* rwlock)
+{
+   int   ret;
+   int   res;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   CALL_FN_W_W(ret, fn, rwlock);
+   VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_RWLOCK_DESTROY,
+                              rwlock, 0, 0, 0, 0);
+   return ret;
+}
+
+// pthread_rwlock_rdlock
+PTH_FUNC(int,
+         pthreadZurwlockZurdlockZa, // pthread_rwlock_rdlock*
+         pthread_rwlock_t* rwlock)
+{
+   int   ret;
+   int   res;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_RWLOCK_RDLOCK,
+                              rwlock, sizeof(*rwlock), 0, 0, 0);
+   CALL_FN_W_W(ret, fn, rwlock);
+   VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_RWLOCK_RDLOCK,
+                              rwlock, ret == 0, 0, 0, 0);
+   return ret;
+}
+
+// pthread_rwlock_wrlock
+PTH_FUNC(int,
+         pthreadZurwlockZuwrlockZa, // pthread_rwlock_wrlock*
+         pthread_rwlock_t* rwlock)
+{
+   int   ret;
+   int   res;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_RWLOCK_WRLOCK,
+                              rwlock, sizeof(*rwlock), 0, 0, 0);
+   CALL_FN_W_W(ret, fn, rwlock);
+   VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_RWLOCK_WRLOCK,
+                              rwlock, ret == 0, 0, 0, 0);
+   return ret;
+}
+
+// pthread_rwlock_timedrdlock
+PTH_FUNC(int,
+         pthreadZurwlockZutimedrdlockZa, // pthread_rwlock_timedrdlock*
+         pthread_rwlock_t* rwlock)
+{
+   int   ret;
+   int   res;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_RWLOCK_RDLOCK,
+                              rwlock, sizeof(*rwlock), 0, 0, 0);
+   CALL_FN_W_W(ret, fn, rwlock);
+   VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_RWLOCK_RDLOCK,
+                              rwlock, ret == 0, 0, 0, 0);
+   return ret;
+}
+
+// pthread_rwlock_timedwrlock
+PTH_FUNC(int,
+         pthreadZurwlockZutimedwrlockZa, // pthread_rwlock_timedwrlock*
+         pthread_rwlock_t* rwlock)
+{
+   int   ret;
+   int   res;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_RWLOCK_WRLOCK,
+                              rwlock, sizeof(*rwlock), 0, 0, 0);
+   CALL_FN_W_W(ret, fn, rwlock);
+   VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_RWLOCK_WRLOCK,
+                              rwlock, ret == 0, 0, 0, 0);
+   return ret;
+}
+
+// pthread_rwlock_tryrdlock
+PTH_FUNC(int,
+         pthreadZurwlockZutryrdlockZa, // pthread_rwlock_tryrdlock*
+         pthread_rwlock_t* rwlock)
+{
+   int   ret;
+   int   res;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_RWLOCK_RDLOCK,
+                              rwlock, sizeof(*rwlock), 0, 0, 0);
+   CALL_FN_W_W(ret, fn, rwlock);
+   VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_RWLOCK_RDLOCK,
+                              rwlock, ret == 0, 0, 0, 0);
+   return ret;
+}
+
+// pthread_rwlock_trywrlock
+PTH_FUNC(int,
+         pthreadZurwlockZutrywrlockZa, // pthread_rwlock_trywrlock*
+         pthread_rwlock_t* rwlock)
+{
+   int   ret;
+   int   res;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_RWLOCK_WRLOCK,
+                              rwlock, sizeof(*rwlock), 0, 0, 0);
+   CALL_FN_W_W(ret, fn, rwlock);
+   VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_RWLOCK_WRLOCK,
+                              rwlock, ret == 0, 0, 0, 0);
+   return ret;
+}
+
+// pthread_rwlock_unlock
+PTH_FUNC(int,
+         pthreadZurwlockZuunlockZa, // pthread_rwlock_unlock*
+         pthread_rwlock_t* rwlock)
+{
+   int   ret;
+   int   res;
+   OrigFn fn;
+   VALGRIND_GET_ORIG_FN(fn);
+   CALL_FN_W_W(ret, fn, rwlock);
+   VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_RWLOCK_UNLOCK,
+                              rwlock, ret == 0, 0, 0, 0);
+   return ret;
+}
+
+
 /*
  * Local variables:
  * c-basic-offset: 3

Modified: trunk/exp-drd/drd_main.c
===================================================================
--- trunk/exp-drd/drd_main.c    2008-03-01 13:55:33 UTC (rev 7523)
+++ trunk/exp-drd/drd_main.c    2008-03-01 15:27:41 UTC (rev 7524)
@@ -453,26 +453,19 @@
    mutex_post_destroy(mutex);
 }
 
-void drd_pre_mutex_lock(const DrdThreadId drd_tid,
-                        const Addr mutex,
+void drd_pre_mutex_lock(const Addr mutex,
                         const SizeT size,
                         const MutexT mutex_type)
 {
    mutex_pre_lock(mutex, size, mutex_type);
 }
 
-void drd_post_mutex_lock(const DrdThreadId drd_tid,
-                         const Addr mutex,
-                         const SizeT size,
-                         const MutexT mutex_type,
-                         const Bool took_lock)
+void drd_post_mutex_lock(const Addr mutex, const Bool took_lock)
 {
-   mutex_post_lock(mutex, size, mutex_type, took_lock);
+   mutex_post_lock(mutex, took_lock);
 }
 
-void drd_pre_mutex_unlock(const DrdThreadId drd_tid,
-                          const Addr mutex,
-                          const MutexT mutex_type)
+void drd_pre_mutex_unlock(const Addr mutex, const MutexT mutex_type)
 {
    mutex_unlock(mutex, mutex_type);
 }

Modified: trunk/exp-drd/drd_mutex.c
===================================================================
--- trunk/exp-drd/drd_mutex.c   2008-03-01 13:55:33 UTC (rev 7523)
+++ trunk/exp-drd/drd_mutex.c   2008-03-01 15:27:41 UTC (rev 7524)
@@ -137,10 +137,11 @@
   return &clientobj_get(mutex, ClientMutex)->mutex;
 }
 
+/** Called before pthread_mutex_init(). */
 struct mutex_info*
 mutex_init(const Addr mutex, const SizeT size, const MutexT mutex_type)
 {
-  struct mutex_info* mutex_p;
+  struct mutex_info* p;
 
   if (s_trace_mutex)
   {
@@ -152,22 +153,33 @@
                  mutex);
   }
 
-  mutex_p = mutex_get(mutex);
-  if (mutex_p)
+  if (mutex_type == mutex_type_invalid_mutex)
   {
+    GenericErrInfo GEI;
+    VG_(maybe_record_error)(VG_(get_running_tid)(),
+                            GenericErr,
+                            VG_(get_IP)(VG_(get_running_tid)()),
+                            "Invalid mutex",
+                            &GEI);
+    return 0;
+  }
+
+  p = mutex_get(mutex);
+  if (p)
+  {
     const ThreadId vg_tid = VG_(get_running_tid)();
     MutexErrInfo MEI
-      = { mutex_p->a1, mutex_p->recursion_count, mutex_p->owner };
+      = { p->a1, p->recursion_count, p->owner };
     VG_(maybe_record_error)(vg_tid,
                             MutexErr,
                             VG_(get_IP)(vg_tid),
                             "Mutex reinitialization",
                             &MEI);
-    return mutex_p;
+    return p;
   }
-  mutex_p = mutex_get_or_allocate(mutex, size, mutex_type);
+  p = mutex_get_or_allocate(mutex, size, mutex_type);
 
-  return mutex_p;
+  return p;
 }
 
 /** Called after pthread_mutex_destroy(). */
@@ -200,10 +212,33 @@
   struct mutex_info* p;
 
   p = mutex_get(mutex);
+
+  if (s_trace_mutex)
+  {
+    VG_(message)(Vg_UserMsg,
+                 "[%d/%d] pre_mutex_lock  %s 0x%lx rc %d owner %d",
+                 VG_(get_running_tid)(),
+                 thread_get_running_tid(),
+                 p ? mutex_get_typename(p) : "(?)",
+                 mutex,
+                 p ? p->recursion_count : 0,
+                 p ? p->owner : VG_INVALID_THREADID);
+  }
+
+  if (mutex_type == mutex_type_invalid_mutex)
+  {
+    GenericErrInfo GEI;
+    VG_(maybe_record_error)(VG_(get_running_tid)(),
+                            GenericErr,
+                            VG_(get_IP)(VG_(get_running_tid)()),
+                            "Invalid mutex",
+                            &GEI);
+    return;
+  }
+
   if (p == 0)
   {
-    mutex_init(mutex, size, mutex_type);
-    p = mutex_get(mutex);
+    p = mutex_init(mutex, size, mutex_type);
   }
 
   tl_assert(p);
@@ -226,51 +261,33 @@
  * Note: this function must be called after pthread_mutex_lock() has been
  * called, or a race condition is triggered !
  */
-int mutex_post_lock(const Addr mutex, const SizeT size, MutexT mutex_type,
-                    const Bool took_lock)
+int mutex_post_lock(const Addr mutex, const Bool took_lock)
 {
   const DrdThreadId drd_tid = thread_get_running_tid();
-  struct mutex_info* const p = mutex_get_or_allocate(mutex, size, mutex_type);
+  struct mutex_info* p;
 
+  p = mutex_get(mutex);
+
   if (s_trace_mutex)
   {
     VG_(message)(Vg_UserMsg,
                  "[%d/%d] post_mutex_lock %s 0x%lx rc %d owner %d",
                  VG_(get_running_tid)(),
                  drd_tid,
-                 mutex_get_typename(p),
+                 p ? mutex_get_typename(p) : "(?)",
                  mutex,
                  p ? p->recursion_count : 0,
                  p ? p->owner : VG_INVALID_THREADID);
   }
 
-  if (mutex_type == mutex_type_invalid_mutex)
-  {
-    GenericErrInfo GEI;
-    VG_(maybe_record_error)(VG_(get_running_tid)(),
-                            GenericErr,
-                            VG_(get_IP)(VG_(get_running_tid)()),
-                            "Invalid mutex",
-                            &GEI);
-  }
-
   if (p == 0)
   {
-     GenericErrInfo GEI;
-     VG_(maybe_record_error)(VG_(get_running_tid)(),
-                             GenericErr,
-                             VG_(get_IP)(VG_(get_running_tid)()),
-                             "Not a mutex",
-                             &GEI);
      return 0;
   }
 
   if (! took_lock)
      return p->recursion_count;
 
-  tl_assert(p->mutex_type == mutex_type);
-  tl_assert(p->a2 - p->a1 == size);
-
   if (p->recursion_count == 0)
   {
     p->owner = drd_tid;
@@ -335,6 +352,7 @@
                             VG_(get_IP)(VG_(get_running_tid)()),
                             "Invalid mutex",
                             &GEI);
+    return 0;
   }
 
   if (p == 0)

Modified: trunk/exp-drd/drd_mutex.h
===================================================================
--- trunk/exp-drd/drd_mutex.h   2008-03-01 13:55:33 UTC (rev 7523)
+++ trunk/exp-drd/drd_mutex.h   2008-03-01 15:27:41 UTC (rev 7524)
@@ -46,8 +46,7 @@
 struct mutex_info* mutex_get(const Addr mutex);
 void mutex_pre_lock(const Addr mutex, const SizeT size,
                     const MutexT mutex_type);
-int mutex_post_lock(const Addr mutex, const SizeT size,
-                    const MutexT mutex_type, const Bool took_lock);
+int mutex_post_lock(const Addr mutex, const Bool took_lock);
 int mutex_unlock(const Addr mutex, const MutexT mutex_type);
 const char* mutex_get_typename(struct mutex_info* const p);
 const char* mutex_type_name(const MutexT mt);

Modified: trunk/exp-drd/drd_track.h
===================================================================
--- trunk/exp-drd/drd_track.h   2008-03-01 13:55:33 UTC (rev 7523)
+++ trunk/exp-drd/drd_track.h   2008-03-01 15:27:41 UTC (rev 7524)
@@ -27,12 +27,10 @@
 
 void drd_pre_mutex_init(Addr mutex, SizeT size, const MutexT mutex_type);
 void drd_post_mutex_destroy(Addr mutex, const MutexT mutex_type);
-void drd_pre_mutex_lock(DrdThreadId tid, Addr mutex, const SizeT size,
+void drd_pre_mutex_lock(const Addr mutex, const SizeT size,
                         const MutexT mutex_type);
-void drd_post_mutex_lock(DrdThreadId tid, Addr mutex, const SizeT size,
-                         const MutexT mutex_type, const Bool took_lock);
-void drd_pre_mutex_unlock(const DrdThreadId tid, const Addr mutex,
-                          const MutexT mutex_type);
+void drd_post_mutex_lock(Addr mutex, const Bool took_lock);
+void drd_pre_mutex_unlock(const Addr mutex, const MutexT mutex_type);
 
 void drd_pre_cond_init(Addr cond, SizeT s);
 void drd_post_cond_destroy(Addr cond);

Modified: trunk/exp-drd/tests/tc09_bad_unlock.stderr.exp
===================================================================
--- trunk/exp-drd/tests/tc09_bad_unlock.stderr.exp      2008-03-01 13:55:33 UTC 
(rev 7523)
+++ trunk/exp-drd/tests/tc09_bad_unlock.stderr.exp      2008-03-01 15:27:41 UTC 
(rev 7524)
@@ -18,11 +18,6 @@
    by 0x........: nearly_main (tc09_bad_unlock.c:41)
    by 0x........: main (tc09_bad_unlock.c:49)
 
-Not a mutex
-   at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
-   by 0x........: nearly_main (tc09_bad_unlock.c:41)
-   by 0x........: main (tc09_bad_unlock.c:49)
-
 Attempt to unlock a mutex that is not locked: address 0x........, recursion 
count -1, owner 1.
    at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
    by 0x........: nearly_main (tc09_bad_unlock.c:27)
@@ -42,9 +37,4 @@
    by 0x........: nearly_main (tc09_bad_unlock.c:41)
    by 0x........: main (tc09_bad_unlock.c:50)
 
-Not a mutex
-   at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
-   by 0x........: nearly_main (tc09_bad_unlock.c:41)
-   by 0x........: main (tc09_bad_unlock.c:50)
-
-ERROR SUMMARY: 8 errors from 8 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 6 errors from 6 contexts (suppressed: 0 from 0)

Modified: trunk/exp-drd/tests/tc20_verifywrap.stderr.exp2
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap.stderr.exp2     2008-03-01 13:55:33 UTC 
(rev 7523)
+++ trunk/exp-drd/tests/tc20_verifywrap.stderr.exp2     2008-03-01 15:27:41 UTC 
(rev 7524)
@@ -16,6 +16,10 @@
 ---------------- pthread_mutex_lock et al ----------------
 
 
+Invalid mutex
+   at 0x........: pthread_mutex_init (drd_intercepts.c:?)
+   by 0x........: main (tc20_verifywrap.c:92)
+
 Destroying locked mutex: address 0x........, recursion count 1, owner 1.
    at 0x........: pthread_mutex_destroy (drd_intercepts.c:?)
    by 0x........: main (tc20_verifywrap.c:102)
@@ -36,10 +40,6 @@
    at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
    by 0x........: main (tc20_verifywrap.c:125)
 
-Mutex not locked: address 0x........, recursion count 0, owner 0.
-   at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
-   by 0x........: main (tc20_verifywrap.c:125)
-
 ---------------- pthread_cond_wait et al ----------------
 
 

Modified: trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp2
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp2    2008-03-01 13:55:33 UTC 
(rev 7523)
+++ trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp2    2008-03-01 15:27:41 UTC 
(rev 7524)
@@ -16,39 +16,41 @@
 ---------------- pthread_mutex_lock et al ----------------
 
 [1/1] mutex_init      invalid mutex 0x........
+
+Invalid mutex
+   at 0x........: pthread_mutex_init (drd_intercepts.c:?)
+   by 0x........: main (tc20_verifywrap.c:92)
 [1/1] mutex_init      mutex 0x........
+[1/1] pre_mutex_lock  mutex 0x........ rc 0 owner 0
 [1/1] post_mutex_lock mutex 0x........ rc 0 owner 0
 [1/1] mutex_destroy   mutex 0x........
 
 Destroying locked mutex: address 0x........, recursion count 1, owner 1.
    at 0x........: pthread_mutex_destroy (drd_intercepts.c:?)
    by 0x........: main (tc20_verifywrap.c:102)
-[1/1] mutex_init      invalid mutex 0x........
-[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0
+[1/1] pre_mutex_lock  (?) 0x........ rc 0 owner 0
 
 Invalid mutex
    at 0x........: pthread_mutex_lock (drd_intercepts.c:?)
    by 0x........: main (tc20_verifywrap.c:108)
-[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0
+[1/1] post_mutex_lock (?) 0x........ rc 0 owner 0
+[1/1] pre_mutex_lock  (?) 0x........ rc 0 owner 0
 
 Invalid mutex
    at 0x........: pthread_mutex_trylock (drd_intercepts.c:?)
    by 0x........: main (tc20_verifywrap.c:116)
-[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0
+[1/1] post_mutex_lock (?) 0x........ rc 0 owner 0
+[1/1] pre_mutex_lock  (?) 0x........ rc 0 owner 0
 
 Invalid mutex
    at 0x........: pthread_mutex_timedlock (drd_intercepts.c:?)
    by 0x........: main (tc20_verifywrap.c:121)
-[1/1] mutex_unlock    invalid mutex 0x........ rc 0
+[1/1] post_mutex_lock (?) 0x........ rc 0 owner 0
 
 Invalid mutex
    at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
    by 0x........: main (tc20_verifywrap.c:125)
 
-Mutex not locked: address 0x........, recursion count 0, owner 0.
-   at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
-   by 0x........: main (tc20_verifywrap.c:125)
-
 ---------------- pthread_cond_wait et al ----------------
 
 [1/1] mutex_init      error checking mutex 0x........
@@ -110,39 +112,53 @@
 ------------ dealloc of mem holding locks ------------
 
 [1/1] mutex_destroy   error checking mutex 0x........
-[1/1] mutex_destroy   invalid mutex 0x........
-[1/1] mutex_destroy   invalid mutex 0x........
+[1/1] pre_mutex_lock  (?) 0x........ rc 0 owner 0
 [1/1] mutex_init      recursive mutex 0x........
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 0
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
+[1/1] pre_mutex_lock  recursive mutex 0x........ rc 0 owner 1
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
+[1/1] pre_mutex_lock  recursive mutex 0x........ rc 0 owner 1
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
+[1/1] pre_mutex_lock  recursive mutex 0x........ rc 0 owner 1
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
+[1/1] pre_mutex_lock  recursive mutex 0x........ rc 0 owner 1
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
+[1/1] pre_mutex_lock  recursive mutex 0x........ rc 0 owner 1
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
+[1/1] pre_mutex_lock  recursive mutex 0x........ rc 0 owner 1
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
+[1/1] pre_mutex_lock  recursive mutex 0x........ rc 0 owner 1
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
+[1/1] pre_mutex_lock  recursive mutex 0x........ rc 0 owner 1
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
+[1/1] pre_mutex_lock  recursive mutex 0x........ rc 0 owner 1
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
+[1/1] pre_mutex_lock  recursive mutex 0x........ rc 0 owner 1
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
+[1/1] pre_mutex_lock  recursive mutex 0x........ rc 0 owner 1
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
+[1/1] pre_mutex_lock  recursive mutex 0x........ rc 0 owner 1
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
+[1/1] pre_mutex_lock  recursive mutex 0x........ rc 0 owner 1
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
+[1/1] pre_mutex_lock  recursive mutex 0x........ rc 0 owner 1
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
+[1/1] pre_mutex_lock  recursive mutex 0x........ rc 0 owner 1
 [1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
 [1/1] mutex_unlock    recursive mutex 0x........ rc 1
 

Modified: trunk/exp-drd/tests/tc23_bogus_condwait.stderr.exp
===================================================================
--- trunk/exp-drd/tests/tc23_bogus_condwait.stderr.exp  2008-03-01 13:55:33 UTC 
(rev 7523)
+++ trunk/exp-drd/tests/tc23_bogus_condwait.stderr.exp  2008-03-01 15:27:41 UTC 
(rev 7524)
@@ -12,14 +12,6 @@
    by 0x........: clone (in /...libc...)
 
 Thread 1:
-Not a mutex
-   at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
-   by 0x........: main (tc23_bogus_condwait.c:69)
-
-Not a mutex
-   at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
-   by 0x........: main (tc23_bogus_condwait.c:69)
-
 Mutex not locked: address 0x........, recursion count 0, owner 0.
    at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
    by 0x........: main (tc23_bogus_condwait.c:72)
@@ -66,4 +58,4 @@
    by 0x........: start_thread (in libpthread-?.?.so)
    by 0x........: clone (in /...libc...)
 
-ERROR SUMMARY: 11 errors from 11 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 9 errors from 9 contexts (suppressed: 0 from 0)


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Valgrind-developers mailing list
Valgrind-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-developers

Reply via email to