On Wed, Apr 21, 2010 at 3:40 AM, Jorge Moraleda
<jorge.moral...@gmail.com> wrote:
>>> Hello Jorge,
>>>
>>> Unfortunately not all libraries have been designed with data-race
>>> detection tools in mind. Several libraries contain code that triggers
>>> benign data races. Examples are the I/O code in libstdc++ and in libc.
>>>
>>> You can either create a suppression pattern to suppress the above
>>> races, or even simpler, add the following code in main() before thread
>>> creation starts:
>>>
>>>  std::ostringstream dummy;
>>>  dummy << 0;
>>>
>>> The above code will make sure that locale initialization, which is
>>> triggered by sending an number to an I/O stream, will happen before
>>> any threads are created and hence no races will be reported anymore on
>>> locale initialization.
>>
>> This will not hide the race on _ZNSs4_Rep20_S_empty_rep_storageE.
>> And suppressing errors in string guts may hide real races.
>>>
>>> Bart.
>>>
>
> Hello Konstanting and Bart and others,
>
> I get race condition warnings
>
> ==20312==    at 0x4C29303: pthread_mutex_lock (drd_pthread_intercepts.c:580)
> ==20312==    by 0x6EAC85E: std::locale::locale() (in
> /usr/lib/libstdc++.so.6.0.13)
> ==20312==    by 0x6EE0C93: std::basic_stringstream<char,
> std::char_traits<char>, std::allocator<char>
>>::basic_stringstream(std::_Ios_Openmode) (in
> /usr/lib/libstdc++.so.6.0.13)
>
> when constructing std::stringstream and std::istringstream's. These
> look similar to the ones I asked about for std::ostringstream a few
> weeks ago. I tried a similar trick to the one Konstantin suggested for
> ostringstream. Namely, to write the following lines before thread
> creation starts:
>
> std::stringstream dummy2;
> dummy2 << 0;
> std::istringstream dummy3(dummy2.str());
>
> But I still get warnings. Is there any initialization trick that
> works? Has a bug report been already filed against the stl? That is,
> assuming these are real bugs, I have not been able to find any
> information about locale race conditions on the web. If they are not
> real bugs, but false positives, are there any "magic" drd macros, like
> the one Konstantin described for the string::clear method
>
>   extern char _ZNSs4_Rep20_S_empty_rep_storageE[32];
>   DRD_IGNORE_VAR(_ZNSs4_Rep20_S_empty_rep_storageE);
>
> that I can include to not report these errors?
>
> By the way, I also get these race condition warnings for locale
> initialization when using boost::lexical_cast.

Have you already found a workaround that allows to avoid triggering
the race report on std::locale::locale() ? If not, it would help if
you could post a small example that allows to reproduce this behavior.

Bart.

------------------------------------------------------------------------------

_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to