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