]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
- Added more rwlock type checking.
authorBart Van Assche <bvanassche@acm.org>
Mon, 27 Jul 2009 17:02:52 +0000 (17:02 +0000)
committerBart Van Assche <bvanassche@acm.org>
Mon, 27 Jul 2009 17:02:52 +0000 (17:02 +0000)
- The rwlock_type_checking test should now no longer trigger a sporadic
  deadlock.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10639

drd/drd_rwlock.c
drd/tests/rwlock_type_checking.c
drd/tests/rwlock_type_checking.stderr.exp

index 9554e5c7bb4320c2b809151b49233d6d0d37bb2c..a6edfdd6a5f3e61b9ed2075356ba95b71e642f7f 100644 (file)
@@ -330,6 +330,9 @@ struct rwlock_info* DRD_(rwlock_pre_init)(const Addr rwlock,
 
    p = DRD_(rwlock_get)(rwlock);
 
+   if (p)
+       drd_rwlock_check_type(p, rwlock_type);
+
    if (p)
    {
       const ThreadId vg_tid = VG_(get_running_tid)();
@@ -364,6 +367,8 @@ void DRD_(rwlock_post_destroy)(const Addr rwlock, const RwLockT rwlock_type)
       return;
    }
 
+   drd_rwlock_check_type(p, rwlock_type);
+
    DRD_(clientobj_remove)(rwlock, ClientRwlock);
 }
 
@@ -545,6 +550,9 @@ void DRD_(rwlock_pre_unlock)(const Addr rwlock, const RwLockT rwlock_type)
                               &GEI);
       return;
    }
+
+   drd_rwlock_check_type(p, rwlock_type);
+
    if (! DRD_(rwlock_is_locked_by)(p, drd_tid))
    {
       RwlockErrInfo REI = { DRD_(thread_get_running_tid)(), p->a1 };
index ddcd5c08f74c69f9c61016d097752bee37c51bf6..e4697afd5d8a8dac15abdccf11d31bdd2143e8e7 100644 (file)
@@ -10,6 +10,7 @@
 
 #include <pthread.h>
 #include <stdio.h>
+#include <string.h>
 #include "../../config.h"
 #include "../../drd/drd.h"
 
 int main(int argc, char** argv)
 {
   pthread_rwlock_t posix_rwlock;
-  int user_defined_rwlock;
+  pthread_rwlock_t user_defined_rwlock;
 
+  memset(&user_defined_rwlock, 0, sizeof(user_defined_rwlock));
   ANNOTATE_RWLOCK_CREATE(&user_defined_rwlock);
   pthread_rwlock_init(&posix_rwlock, 0);
 
-  pthread_rwlock_rdlock((pthread_rwlock_t*)&user_defined_rwlock);
+  pthread_rwlock_init((pthread_rwlock_t*)&user_defined_rwlock, 0);
 
-  ANNOTATE_READERLOCK_ACQUIRED(&posix_rwlock);
+  ANNOTATE_READERLOCK_RELEASED(&posix_rwlock);
 
   pthread_rwlock_destroy(&posix_rwlock);
   ANNOTATE_RWLOCK_DESTROY(&user_defined_rwlock);
index db42de30acf325875d5af13457c2b78678fe4df4..6c890ac32e3f220de22bf1a0fbdea5ce2d5f5d5b 100644 (file)
@@ -1,6 +1,6 @@
 
 Attempt to use a user-defined rwlock as a POSIX rwlock: rwlock 0x.........
-   at 0x........: pthread_rwlock_rdlock* (drd_pthread_intercepts.c:?)
+   at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
    by 0x........: main (rwlock_type_checking.c:?)
 rwlock 0x........ was first observed at:
    at 0x........: vgDrdCl_annotate_rwlock (drd.h:?)
@@ -12,20 +12,6 @@ Attempt to use a POSIX rwlock as a user-defined rwlock: rwlock 0x.........
 rwlock 0x........ was first observed at:
    at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
    by 0x........: main (rwlock_type_checking.c:?)
-
-Destroying locked rwlock: rwlock 0x.........
-   at 0x........: pthread_rwlock_destroy* (drd_pthread_intercepts.c:?)
-   by 0x........: main (rwlock_type_checking.c:?)
-rwlock 0x........ was first observed at:
-   at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
-   by 0x........: main (rwlock_type_checking.c:?)
-
-Destroying locked rwlock: rwlock 0x.........
-   at 0x........: vgDrdCl_annotate_rwlock (drd.h:?)
-   by 0x........: main (rwlock_type_checking.c:?)
-rwlock 0x........ was first observed at:
-   at 0x........: vgDrdCl_annotate_rwlock (drd.h:?)
-   by 0x........: main (rwlock_type_checking.c:?)
 Finished.
 
-ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 4 errors from 2 contexts (suppressed: 0 from 0)