|
From: Rainer G. <rge...@gm...> - 2010-04-14 06:34:35
|
Hi all, I am working with the svn version of valgrind (updated this morning). I see a series of violations in drd which I can not identify the root cause. An example violation looks like this: ==22593== Thread 3: ==22593== Conflicting load by thread 3 at 0x3401e1b328 size 4 ==22593== at 0x3401C0E090: write (in /lib64/libpthread-2.11.1.so) ==22593== by 0x41D99A: dbgprint (debug.c:894) ==22593== by 0x41DB08: dbgprintf (debug.c:987) ==22593== by 0x4258B3: asyncWriterThread (stream.c:939) ==22593== by 0x4A12280: vgDrd_thread_wrapper (drd_pthread_intercepts.c:272) ==22593== by 0x3401C06A39: start_thread (in /lib64/libpthread-2.11.1.so) ==22593== Allocation context: BSS section of /lib64/libpthread-2.11.1.so ==22593== Other segment start (thread 1) ==22593== at 0x4A0993F: pthread_mutex_unlock (drd_pthread_intercepts.c:633) ==22593== by 0x427CEA: wtiSetState (wti.c:156) ==22593== by 0x427946: wtpAdviseMaxWorkers (wtp.c:519) ==22593== by 0x42C361: qqueueStart (queue.c:150) ==22593== by 0x40BA4A: init (syslogd.c:2400) ==22593== by 0x40C569: mainThread (syslogd.c:2856) ==22593== by 0x40DA16: realMain (syslogd.c:3554) ==22593== by 0x340101EB1C: (below main) (in /lib64/libc-2.11.1.so) ==22593== Other segment end (thread 1) ==22593== at 0x34010DE621: clone (in /lib64/libc-2.11.1.so) ==22593== by 0x3401C06333: do_clone.clone.0 (in /lib64/libpthread-2.11.1.so) ==22593== by 0x3401C07001: pthread_create@@GLIBC_2.2.5 (in /lib64/libpthread-2.11.1.so) ==22593== by 0x4A11DE8: pthread_create@* (drd_pthread_intercepts.c:409) ==22593== by 0x42795B: wtpAdviseMaxWorkers (wtp.c:520) ==22593== by 0x42C361: qqueueStart (queue.c:150) ==22593== by 0x40BA4A: init (syslogd.c:2400) ==22593== by 0x40C569: mainThread (syslogd.c:2856) ==22593== by 0x40DA16: realMain (syslogd.c:3554) ==22593== by 0x340101EB1C: (below main) (in /lib64/libc-2.11.1.so) ==22593== I can not identify which variable is at 0x3401e1b328. Given the alloc context, it looks like it is a static variable in the pthreads context. The code in question [1] does proper mutex locks before and after the relevant section. At least this is what I can identify. So I conclude that this is a "problem" in pthreads and I can safely create supressions for it. On the other hand, I do not understand why this only occurs in this instant, so I thought I better ask... Is this something that I can simply suppress or does it look like a real issue? If it is a real issue, can someone provide some advise on how to track it down? Thanks, Rainer [1] http://git.adiscon.com/?p=rsyslog.git;a=blob;f=runtime/debug.c;h=da471609f01c6e11dd3274819b6d8f48bc0695de;hb=refs/heads/v4-devel#l842 |
|
From: Bart V. A. <bva...@ac...> - 2010-04-14 16:48:07
|
On Wed, Apr 14, 2010 at 8:34 AM, Rainer Gerhards <rge...@gm...>wrote: > I am working with the svn version of valgrind (updated this morning). > I see a series of violations in drd which I can not identify the root > cause. An example violation looks like this: > > ==22593== Thread 3: > ==22593== Conflicting load by thread 3 at 0x3401e1b328 size 4 > ==22593== at 0x3401C0E090: write (in /lib64/libpthread-2.11.1.so) > ==22593== by 0x41D99A: dbgprint (debug.c:894) > ==22593== by 0x41DB08: dbgprintf (debug.c:987) > ==22593== by 0x4258B3: asyncWriterThread (stream.c:939) > ==22593== by 0x4A12280: vgDrd_thread_wrapper > (drd_pthread_intercepts.c:272) > ==22593== by 0x3401C06A39: start_thread (in /lib64/libpthread-2.11.1.so > ) > ==22593== Allocation context: BSS section of /lib64/libpthread-2.11.1.so > ==22593== Other segment start (thread 1) > ==22593== at 0x4A0993F: pthread_mutex_unlock > (drd_pthread_intercepts.c:633) > ==22593== by 0x427CEA: wtiSetState (wti.c:156) > ==22593== by 0x427946: wtpAdviseMaxWorkers (wtp.c:519) > ==22593== by 0x42C361: qqueueStart (queue.c:150) > ==22593== by 0x40BA4A: init (syslogd.c:2400) > ==22593== by 0x40C569: mainThread (syslogd.c:2856) > ==22593== by 0x40DA16: realMain (syslogd.c:3554) > ==22593== by 0x340101EB1C: (below main) (in /lib64/libc-2.11.1.so) > ==22593== Other segment end (thread 1) > ==22593== at 0x34010DE621: clone (in /lib64/libc-2.11.1.so) > ==22593== by 0x3401C06333: do_clone.clone.0 (in /lib64/ > libpthread-2.11.1.so) > ==22593== by 0x3401C07001: pthread_create@@GLIBC_2.2.5 (in > /lib64/libpthread-2.11.1.so) > ==22593== by 0x4A11DE8: pthread_create@* (drd_pthread_intercepts.c:409) > ==22593== by 0x42795B: wtpAdviseMaxWorkers (wtp.c:520) > ==22593== by 0x42C361: qqueueStart (queue.c:150) > ==22593== by 0x40BA4A: init (syslogd.c:2400) > ==22593== by 0x40C569: mainThread (syslogd.c:2856) > ==22593== by 0x40DA16: realMain (syslogd.c:3554) > ==22593== by 0x340101EB1C: (below main) (in /lib64/libc-2.11.1.so) > ==22593== > > I can not identify which variable is at 0x3401e1b328. Given the alloc > context, it looks like it is a static variable in the pthreads > context. The code in question [1] does proper mutex locks before and > after the relevant section. At least this is what I can identify. So I > conclude that this is a "problem" in pthreads and I can safely create > supressions for it. On the other hand, I do not understand why this > only occurs in this instant, so I thought I better ask... > > Is this something that I can simply suppress or does it look like a > real issue? If it is a real issue, can someone provide some advise on > how to track it down? > Maybe it's the thread cancellation code that triggers the above race report. Many system call wrappers in libpthread first check whether one or multiple threads are active. If multiple threads are active, the cancellation type is set to async before the system call and restored after the system call. Bart. |