]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
DRD: Report an error if an invalid argument is passed to pthread_detach(). Do not...
authorBart Van Assche <bvanassche@acm.org>
Wed, 9 Mar 2011 17:53:28 +0000 (17:53 +0000)
committerBart Van Assche <bvanassche@acm.org>
Wed, 9 Mar 2011 17:53:28 +0000 (17:53 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11614

drd/drd_clientreq.c
drd/drd_pthread_intercepts.c

index d08d25eff5fcadffdc935f4aea428a5bd9bd5fa6..8e9eb8256531dc9df90723199f41f28a734cb421 100644 (file)
@@ -210,9 +210,20 @@ static Bool handle_client_request(ThreadId vg_tid, UWord* arg, UWord* ret)
       break;
 
    case VG_USERREQ__SET_JOINABLE:
-      DRD_(thread_set_joinable)(DRD_(PtThreadIdToDrdThreadId)(arg[1]),
-                                (Bool)arg[2]);
+   {
+      const DrdThreadId drd_joinable = DRD_(PtThreadIdToDrdThreadId)(arg[1]);
+      if (drd_joinable != DRD_INVALID_THREADID)
+         DRD_(thread_set_joinable)(drd_joinable, (Bool)arg[2]);
+      else {
+         InvalidThreadIdInfo ITI = { DRD_(thread_get_running_tid)(), arg[1] };
+         VG_(maybe_record_error)(vg_tid,
+                                 InvalidThreadId,
+                                 VG_(get_IP)(vg_tid),
+                                 "pthread_detach(): invalid thread ID",
+                                 &ITI);
+      }
       break;
+   }
 
    case VG_USERREQ__ENTERING_PTHREAD_CREATE:
       DRD_(thread_entering_pthread_create)(drd_tid);
index 45a464c3025a6d70408255335b4bd14985523c53..6b0b3fe41e98ecfa5d38637c2452f01733125346 100644 (file)
@@ -463,14 +463,11 @@ int pthread_detach_intercept(pthread_t pt_thread)
 {
    int ret;
    OrigFn fn;
+
    VALGRIND_GET_ORIG_FN(fn);
-   {
-      CALL_FN_W_W(ret, fn, pt_thread);
-      if (ret == 0)
-      {
-         DRD_(set_joinable)(pt_thread, 0);
-      }
-   }
+   CALL_FN_W_W(ret, fn, pt_thread);
+   DRD_(set_joinable)(pt_thread, 0);
+
    return ret;
 }