>> 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.

Thank you!

Jorge

------------------------------------------------------------------------------
_______________________________________________
Valgrind-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to