Added command-line option --trace-clientobj. Renamed drd_clientobj* functions into clientobj*. Moved some code from drd_main.c into the drd_mutex.c/drd_cond.c/drd_semaphore.c.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7522 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/exp-drd/drd_mutex.c b/exp-drd/drd_mutex.c
index 568bf4d..e99b4bb 100644
--- a/exp-drd/drd_mutex.c
+++ b/exp-drd/drd_mutex.c
@@ -38,7 +38,6 @@
 
 static void mutex_cleanup(struct mutex_info* p);
 static Bool mutex_is_locked(struct mutex_info* const p);
-static void mutex_destroy(struct mutex_info* const p);
 
 
 // Local variables.
@@ -108,7 +107,7 @@
   struct mutex_info* p;
 
   tl_assert(offsetof(DrdClientobj, mutex) == 0);
-  p = &drd_clientobj_get(mutex, ClientMutex)->mutex;
+  p = &clientobj_get(mutex, ClientMutex)->mutex;
   if (p)
   {
     tl_assert(p->mutex_type == mutex_type);
@@ -116,7 +115,7 @@
     return p;
   }
 
-  if (drd_clientobj_present(mutex, mutex + size))
+  if (clientobj_present(mutex, mutex + size))
   {
      GenericErrInfo GEI;
      VG_(maybe_record_error)(VG_(get_running_tid)(),
@@ -127,7 +126,7 @@
      return 0;
   }
 
-  p = &drd_clientobj_add(mutex, mutex + size, ClientMutex)->mutex;
+  p = &clientobj_add(mutex, mutex + size, ClientMutex)->mutex;
   mutex_initialize(p, mutex, size, mutex_type);
   return p;
 }
@@ -135,7 +134,7 @@
 struct mutex_info* mutex_get(const Addr mutex)
 {
   tl_assert(offsetof(DrdClientobj, mutex) == 0);
-  return &drd_clientobj_get(mutex, ClientMutex)->mutex;
+  return &clientobj_get(mutex, ClientMutex)->mutex;
 }
 
 struct mutex_info*
@@ -171,22 +170,24 @@
   return mutex_p;
 }
 
-static void mutex_destroy(struct mutex_info* const p)
-{
-  drd_clientobj_remove(p->a1, ClientMutex);
-}
-
 /** Called after pthread_mutex_destroy(). */
 void mutex_post_destroy(const Addr mutex)
 {
-   struct mutex_info* p;
+  struct mutex_info* p;
 
-   p = mutex_get(mutex);
-   tl_assert(p);
-   if (p)
-   {
-      mutex_destroy(p);
-   }
+  p = mutex_get(mutex);
+  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;
+  }
+
+  clientobj_remove(mutex, ClientMutex);
 }
 
 /** Called before pthread_mutex_lock() is invoked. If a data structure for
@@ -466,8 +467,8 @@
 {
   struct mutex_info* p;
 
-  drd_clientobj_resetiter();
-  for ( ; (p = &drd_clientobj_next(ClientMutex)->mutex) != 0; )
+  clientobj_resetiter();
+  for ( ; (p = &clientobj_next(ClientMutex)->mutex) != 0; )
   {
     if (p->owner == tid && p->recursion_count > 0)
     {