This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libstdc++/31117] c++locale.o thread-unsafe in libstdc++
- From: "pcarlini at suse dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 12 Mar 2007 18:51:25 -0000
- Subject: [Bug libstdc++/31117] c++locale.o thread-unsafe in libstdc++
- References: <bug-31117-9156@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #5 from pcarlini at suse dot de 2007-03-12 18:51 -------
(In reply to comment #4)
> Perhaps there are different degrees of thread safety here.
>
> If I write my multi-threaded program such that only one thread does stream I/O
> with libstdc++, I would expect it to operate safely with respect to the locale
> issue. But it will not: any other thread which modifies errno (via set_errno)
> is potential trouble for my stream I/O thread.
That's not correct. Anyone, anywhere, irrespective of I/O can do a "setlocale"
and that will change the global locale, which is also changed in a
thread-unsafe way at any I/O.
Anyway, what happens in the GNU systems is that errno is a per-thread variable
and the __convert_to_v code has to do nothing special, just safely use it. In
the systems using the generic locale model a completely different strategy is
needed if the C library of those systems doesn't provide a thread-safe
implementation. I have no idea what that can be and in any case must be solved
together with the setlocale one.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31117