The 22.locale.messages.cpp test fails due to using incorrect
guard type in functions from messages.cpp file. There used
_RWSTD_MT_STATIC_GUARD(), so that the functions are protected
from working simultaneously with itself only. But from every that
functions invoked __rw_manage_cat_data() which working with
shared global repository of open catalogs.

  The proposed patch:

  ChangeLog:
  * messages.cpp (__rw_cat_open): Use _RWSTD_MT_CLASS_GUARD instead of
  _RWSTD_MT_STATIC_GUARD to synchronize acces to global repository of
open
  catalogs.
  (__rw_get_message): Ditto.
  (__rw_get_locale): Ditto.
  (__rw_cat_close): Ditto.

Index: messages.cpp
===================================================================
--- messages.cpp        (revision 575597)
+++ messages.cpp        (working copy)
@@ -213,7 +213,7 @@
 int
 __rw_cat_open (const _STD::string &cat_name, const _STD::locale &loc)
 {
-    _RWSTD_MT_STATIC_GUARD (__rw_open_cat_data);
+    _RWSTD_MT_CLASS_GUARD (__rw_open_cat_data);
 
     const nl_catd catd = catopen (cat_name.c_str (), NL_CAT_LOCALE);
     if (_RWSTD_BAD_CATD == catd)
@@ -239,7 +239,7 @@
     if (cat < 0)
         return 0;
 
-    _RWSTD_MT_STATIC_GUARD (__rw_open_cat_data);
+    _RWSTD_MT_CLASS_GUARD (__rw_open_cat_data);
 
     __rw_open_cat_data *const pcat_data = __rw_manage_cat_data (cat,
0);
 
@@ -264,7 +264,7 @@
 const _STD::locale&
 __rw_get_locale (int cat)
 {
-    _RWSTD_MT_STATIC_GUARD (__rw_open_cat_data);
+    _RWSTD_MT_CLASS_GUARD (__rw_open_cat_data);
 
     _RWSTD_ASSERT (0 <= cat);
     __rw_open_cat_data* const pcat_data = __rw_manage_cat_data (cat,
0);
@@ -279,7 +279,7 @@
 void
 __rw_cat_close (int cat)
 {
-    _RWSTD_MT_STATIC_GUARD (__rw_open_cat_data);
+    _RWSTD_MT_CLASS_GUARD (__rw_open_cat_data);
     
     __rw_open_cat_data* const pcat_data =
         cat < 0 ? 0 : __rw_manage_cat_data (cat, 0);

Farid.

Reply via email to