[Bug libstdc++/50703] New: std::stringstream not thread-safe
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50703 Bug #: 50703 Summary: std::stringstream not thread-safe Classification: Unclassified Product: gcc Version: 4.2.4 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: hoenle2...@kayser-threde.com Our multi-threaded software (running on the SPARC compatible LEON3 processor for space applications under the RTEMS 4.9.4 operating system) always locks up at the same location outside the application software in libstdc++. See attached debugger screenshot. The error arises between several minutes and several hours of operation. We were able to reproduce the problem with GCC/libstdc++ 4.2.4 and with 4.3.2. We haven't tested newer versions. The error apparently happens when the GNU library function __atomic_add() in atomicity.cc is called very often, probably when being called from different threads. It could also be possibe that the error is not located in atomicity.cc but already in its caller std::stringstream (in basic_ios.h). We are pretty sure the application software can't do anything wrong at this time as just the std::stringstream constructor is being called for an object on the stack. See attached debugger screenshot. We fixed the problem by replacing "std::stringstream" with our own class that uses "printf" internally. Since then the application software never again locked up.
[Bug libstdc++/50703] std::stringstream not thread-safe
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50703 --- Comment #1 from hoenle2...@kayser-threde.com 2011-10-12 15:36:50 UTC --- Created attachment 25475 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=25475 debugger screenshot
[Bug libstdc++/50703] std::stringstream not thread-safe
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50703 --- Comment #3 from hoenle2...@kayser-threde.com 2011-10-13 07:56:47 UTC --- I will try libstdc++ 4.6.x or 4.5.x. Question: May I use this new library with the relatively old compiler I am currently utilizing or do I need to upgrade to a newer compiler version also?
[Bug libstdc++/50703] std::stringstream not thread-safe
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50703 --- Comment #7 from hoenle2...@kayser-threde.com 2011-10-17 08:17:21 UTC --- @Jonathan: You ask "was gcc built with a non-default value for --enable-clocale ?". I don't think so. We perform cross development on Windows with MinGW as supported out-of-the-box by the RTEMS operating system distribution. With that distribution the cross compilation tools come already pre-compiled. Maybe the following gcc output helps: $ sparc-rtems-gcc -v Reading specs from c:/opt/rtems-4.8-mingw/bin/../lib/gcc/sparc-rtems/4.2.4/specs Target: sparc-rtems Configured with: ../gcc-4.2.4/configure --target=sparc-rtems --host i686-mingw32 --build i486-slackware-linux --with-gnu-as --with-gnu-ld --with-newlib --verbose --enable-threads --enable-languages=c,c++ --disable-nls --prefix=/opt/rtems-4.8-mingw --enable-version-specific-runtime-libs --with-system-zlib --disable-libstdcxx-pch --disable-win32-registry --without-included-gettext Thread model: rtems gcc version 4.2.4 - @Paolo: We never access a std::stringstream object from different threads but always from a single thread. When we share objects between threads, we protect them by a pthread mutex. I will perform a test with a new GCC/libstdc++ probably mid November. In case the problem persists I will try to set up a short, self contained reproducer. - Regards Alfred