> -----Original Message-----
> From: Martin Sebor [mailto:[EMAIL PROTECTED] 
> Sent: Thursday, April 03, 2008 11:06 AM
> To: dev@stdcxx.apache.org
> Subject: Re: svn commit: r644364 - in /stdcxx/trunk: 
> src/locale_global.cpp tests/localization/22.locale.statics.mt.cpp
> 
> Travis Vitek wrote:
> >  
> > 
> >> -----Original Message-----
> >> From: Martin Sebor [mailto:[EMAIL PROTECTED] 
> >> Sent: Thursday, April 03, 2008 8:55 AM
> >> To: dev@stdcxx.apache.org
> >> Subject: Re: svn commit: r644364 - in /stdcxx/trunk: 
> >> src/locale_global.cpp tests/localization/22.locale.statics.mt.cpp
> >>
> >> [EMAIL PROTECTED] wrote:
> >>> Author: elemings
> >>> Date: Thu Apr  3 08:32:56 2008
> >>> New Revision: 644364
> >>>
> >>> URL: http://svn.apache.org/viewvc?rev=644364&view=rev
> >>> Log:
> >>> 2008-04-03  Eric Lemings  <[EMAIL PROTECTED]>
> >>>
> >>>   STDCXX-811
> >>>   * src/locale_global.cpp (std::locale::global): Replace call to
> >>>   non-reentrant setlocale() C function with reentrant
> >>>   __rw_setlocale object.
> >> I don't think that's correct. The object's dtor restores
> >> the original locale. We need a mutex around the call to
> >> setlocale. Look for/at the _RWSTD_STATIC_GUARD() and
> >> _RWSTD_CLASS_GUARD() macros.
> >>
> > 
> > Right. It seems that for this to be mt-safe with respect to other
> > library code that calls setlocale(), we would need to lock 
> the same lock
> > that is used by _RW::__rw_setlocale. If don't use the same 
> lock it would
> > be possible for the std::locale::global() call to change the locale
> > while some other library code is reading locale specific data under
> > protection of an active _RW::__rw_setlocale instance.
> 
> Good point. That probably means extending the __rw_setlocale
> interface to release the lock without restoring the original
> locale name.

I'll whip up a patch to src/setlocale.[h/cpp] and post it for
review before submitting the next change.

Brad.

Reply via email to