stdcxx-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Farid Zaripov (JIRA)" <j...@apache.org>
Subject [jira] Commented: (STDCXX-792) __rw_locale::_C_manage() uses mutex based __rw_atomic_preincrement() even if platform supports the native atomic operations
Date Mon, 24 Mar 2008 16:33:24 GMT

    [ https://issues.apache.org/jira/browse/STDCXX-792?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12581591#action_12581591
] 

Farid Zaripov commented on STDCXX-792:
--------------------------------------

The proposed patch below:

  ChangeLog:
  STDCXX-792
  * src/locale_body.cpp (_C_manage): Declare static variable ginit as non-volatile, to use
the
  non-template version __rw_atomic_preincrement() instead of template version, if available.
  Declare static variable ginit as int instead of long because the all native atomic  functions
  are defined for int type and the overloads for long type just calls overload for int type
on
  platforms where sizeof (int) == sizeof (long).

{noformat}
Index: src/locale_body.cpp
===================================================================
--- src/locale_body.cpp	(revision 640425)
+++ src/locale_body.cpp	(working copy)
@@ -805,7 +805,7 @@
 
         if (!global) {
 
-            static volatile long ginit /* = 0 */;
+            static int ginit /* = 0 */;
 
             if (!ginit && 1 == _RWSTD_ATOMIC_PREINCREMENT (ginit, false)) {
                 global  = _C_manage (0, "C");
{noformat}


> __rw_locale::_C_manage() uses mutex based __rw_atomic_preincrement() even if platform
supports the native atomic operations
> ---------------------------------------------------------------------------------------------------------------------------
>
>                 Key: STDCXX-792
>                 URL: https://issues.apache.org/jira/browse/STDCXX-792
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: 22. Localization
>    Affects Versions: 4.1.2, 4.1.3, 4.1.4, 4.2.0
>         Environment: All
>            Reporter: Farid Zaripov
>            Assignee: Farid Zaripov
>             Fix For: 4.2.1
>
>   Original Estimate: 0.5h
>  Remaining Estimate: 0.5h
>
> In __rw_locale::_C_manage() (src/locale_body.cpp, line 808), the static variable ginit
declared as volatile, but __rw_atomic_preincrement() functions, which are implemented using
atomic operations, accepting the non-volatile reference in parameter list. As a result the
template version __rw_atomic_preincrement<volatile long>() (which is implemented using
mutex object) is used.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message