This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [MTASCsft PATCH 07/??] MT-, AS- and AC-Safety docs: manual/ctype.texi


On Jan 30, 2014, Alexandre Oliva <aoliva@redhat.com> wrote:

> On Jan 30, 2014, "Carlos O'Donell" <carlos@redhat.com> wrote:
>> On 01/23/2014 01:48 PM, Alexandre Oliva wrote:
>>> This patch has much of the vestigial records that glocale (now
>>> @mtslocale) was regarded as an MT-Safety problem.
 
>> One nits. See below. We can't rely on optimization IMO.
 
> We don't.  We rely on locale being const, but the elaborate rationale
> was from before we decided that.  Optimization could make this safe even
> if locale wasn't constant, so we could drop the @mtslocale note if we
> were to require optimization.

How about these incremental changes to islower, wctype and iswalnum,
respectively?

diff --git a/manual/ctype.texi b/manual/ctype.texi
index 5bfbcec..2d73d4e 100644
--- a/manual/ctype.texi
+++ b/manual/ctype.texi
@@ -72,7 +72,10 @@ These functions are declared in the header file @file{ctype.h}.
 @c thread-local memory the (indirect) pointer to the ctype array, which
 @c may involve one word access to the global locale object, if that's
 @c the active locale for the thread, and the array, being part of the
-@c locale data, is undeletable, so there's no thread-safety issue.
+@c locale data, is undeletable, so there's no thread-safety issue.  We
+@c might want to mark these with @mtslocale to flag to callers that
+@c changing locales might affect them, even if not these simpler
+@c functions.
 Returns true if @var{c} is a lower-case letter.  The letter need not be
 from the Latin alphabet, any alphabet representable is valid.
 @end deftypefun
@@ -336,9 +339,12 @@ This type is defined in @file{wctype.h}.
 @c should the global locale object change while active, the compiler can
 @c and does combine them all into a single dereference that resolves
 @c once to the LCTYPE locale object used throughout the function, so it
-@c is safe in practice, if not in theory.  Ideally we'd explicitly save
-@c the resolved locale_data object to make it visibly safe instead of
-@c safe only under compiler optimizations.
+@c is safe in (optimized) practice, if not in theory, even when the
+@c locale changes.  Ideally we'd explicitly save the resolved
+@c locale_data object to make it visibly safe instead of safe only under
+@c compiler optimizations, but given the decision that setlocale is
+@c MT-Unsafe, all this would afford us would be the ability to not mark
+@c this function with @mtslocale.
 The @code{wctype} returns a value representing a class of wide
 characters which is identified by the string @var{property}.  Beside
 some standard properties each locale can define its own ones.  In case
@@ -391,12 +397,13 @@ standard classes.
 @safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
 @c The implicit wctype call in the isw* functions is actually an
 @c optimized version because the category has a known offset, but the
-@c wctype is equally safe when optimized, unsafe if not optimized.
-@c Since it's not a macro, and we always optimize, it's fine.  The test
-@c whether wc is ASCII to use the non-wide is* macro/funciton doesn't
-@c bring any other safety issues: the test does not depend on the
-@c locale, and each path after the decision resolves the locale object
-@c only once.
+@c wctype is equally safe when optimized, unsafe with changing locales
+@c if not optimized (thus @mtslocale).  Since it's not a macro, we
+@c always optimize, and the locale can't change in any MT-Safe way, it's
+@c fine.  The test whether wc is ASCII to use the non-wide is*
+@c macro/function doesn't bring any other safety issues: the test does
+@c not depend on the locale, and each path after the decision resolves
+@c the locale object only once.
 This function returns a nonzero value if @var{wc} is an alphanumeric
 character (a letter or number); in other words, if either @code{iswalpha}
 or @code{iswdigit} is true of a character, then @code{iswalnum} is also

-- 
Alexandre Oliva, freedom fighter    http://FSFLA.org/~lxoliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/   FSF Latin America board member
Free Software Evangelist     Red Hat Brazil Toolchain Engineer


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]