Author: elemings
Date: Thu Apr  3 13:17:54 2008
New Revision: 644466

URL: http://svn.apache.org/viewvc?rev=644466&view=rev
Log:
2008-04-03  Eric Lemings  <[EMAIL PROTECTED]>

        STDCXX-811
        * src/setlocale.cpp (__rw_setlocale_mutex): Make mutex visible
        to other translation units.
        * src/locale_global.cpp (std::locale::global): __rw_setlocale
        object won't work because destructor restores previous locale.
        Guard on mutex and revert to original call to setlocale().


Modified:
    stdcxx/trunk/src/locale_global.cpp
    stdcxx/trunk/src/setlocale.cpp

Modified: stdcxx/trunk/src/locale_global.cpp
URL: 
http://svn.apache.org/viewvc/stdcxx/trunk/src/locale_global.cpp?rev=644466&r1=644465&r2=644466&view=diff
==============================================================================
--- stdcxx/trunk/src/locale_global.cpp (original)
+++ stdcxx/trunk/src/locale_global.cpp Thu Apr  3 13:17:54 2008
@@ -29,6 +29,7 @@
 #define _RWSTD_LIB_SRC
 
 #include <rw/_defs.h>
+#include <rw/_mutex.h>
 
 #include <locale.h>
 #include <string.h>
@@ -37,9 +38,13 @@
 #include <loc/_locale.h>
 
 #include "locale_body.h"
-#include "setlocale.h"
 
 
+_RWSTD_NAMESPACE (__rw) {
+
+extern __rw_mutex __rw_setlocale_mutex;
+
+}   // namespace __rw
 
 _RWSTD_NAMESPACE (std) { 
 
@@ -52,10 +57,11 @@
 
         // if the global locale has a name, call setlocale()
 
+        _RWSTD_MT_GUARD (_RW::__rw_setlocale_mutex);
+
         // assumes all locale names (i.e., including those of combined
         // locales) are in a format understandable by setlocale()
-        const _RW::__rw_setlocale clocale (rhs.name().c_str(), _RWSTD_LC_ALL);
-        _RWSTD_UNUSED(clocale);
+        setlocale (_RWSTD_LC_ALL, rhs.name ().c_str ());
 
         // FIXME:
         // handle unnamed locales (i.e., locales containing non-standard

Modified: stdcxx/trunk/src/setlocale.cpp
URL: 
http://svn.apache.org/viewvc/stdcxx/trunk/src/setlocale.cpp?rev=644466&r1=644465&r2=644466&view=diff
==============================================================================
--- stdcxx/trunk/src/setlocale.cpp (original)
+++ stdcxx/trunk/src/setlocale.cpp Thu Apr  3 13:17:54 2008
@@ -72,8 +72,8 @@
 
 _RWSTD_NAMESPACE (__rw) { 
 
-// "setlocale" synchronization
-static __rw_mutex __rw_setlocale_mutex;
+// "setlocale" synchronization (internal, not exported)
+__rw_mutex __rw_setlocale_mutex;
 
 // ctor changes the C library locale, saving the old locale to be 
 // restored by the dtor


Reply via email to