From: Bart Van Assche Date: Sat, 1 Dec 2018 18:43:06 +0000 (-0800) Subject: drd: Fix fork() handling X-Git-Tag: VALGRIND_3_15_0~147 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=df10905d337451489adf82fb68ac2bffae297f89;p=thirdparty%2Fvalgrind.git drd: Fix fork() handling The thread ID passed to DRD_(drd_thread_atfork_child)() is a Valgrind thread ID instead of a DRD thread ID. This patch fixes bug 401578. --- diff --git a/NEWS b/NEWS index ffaabd7d76..7b784a80b2 100644 --- a/NEWS +++ b/NEWS @@ -59,6 +59,7 @@ where XXXXXX is the bug number as listed below. 401277 More bugs in z13 support 401112 LLVM 5.0 generates comparison against partially initialized data 385411 s390x: z13 vector floating-point instructions not implemented +401578 drd: crashes sometimes on fork() Release 3.14.0 (9 October 2018) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/drd/drd_thread.c b/drd/drd_thread.c index 9ada77dfe3..7641a355f1 100644 --- a/drd/drd_thread.c +++ b/drd/drd_thread.c @@ -570,13 +570,13 @@ void DRD_(thread_finished)(const DrdThreadId tid) } /** Called just after fork() in the child process. */ -void DRD_(drd_thread_atfork_child)(const DrdThreadId tid) +void DRD_(drd_thread_atfork_child)(const ThreadId tid) { unsigned i; for (i = 1; i < DRD_N_THREADS; i++) { - if (i == tid) + if (DRD_(g_threadinfo)[i].vg_threadid == tid) continue; if (DRD_(IsValidDrdThreadId(i))) DRD_(thread_delete)(i, True);