[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Do not decorate symbols as dllexport on Cygwin
From: |
Corinna Vinschen |
Subject: |
Re: [PATCH] Do not decorate symbols as dllexport on Cygwin |
Date: |
Mon, 6 Feb 2023 16:08:32 +0100 |
Hi Bruno,
On Feb 5 22:22, Corinna Vinschen wrote:
> On Feb 5 21:41, Bruno Haible wrote:
> > Another option — since we are talking about a single symbol and a single
> > platform — would be if the locking for setlocale_null were not necessary
> > on Cygwin in the first place. I determined that it is necessary by running
> > the unit test gnulib/tests/test-setlocale_null-mt-all.c [3] on Cygwin:
> > without the lock, it crashed within less than 1 second. Could the
> > implementation of setlocale() in Cygwin be changed in such a way that this
> > test does not crash? Then the lock would be necessary.
>
> Well, we could do that by adding Cygwin-internal locking to setlocale
> calls. But that would only be available in the next Cygwin version
> of course.
>
> May I ask what's the idea to provide a thread-safe setlocale? It was
> never defined as thread-safe and POSIX explicitely mentions that. Any
> application expecting to call setlocale thread-safe is broken by design.
> It should use the newlocale/duplocale/uselocale/freelocale API instead,
> isn't it?
Ahhh, I finally see what's going on. The problem is not thread-safety
as such, but thread-safety when reading the value of the LC_ALL category.
Glibc's setlocale isn't entirely thread-safe either, but there's a
difference:
- GLibc creates the global strings returned by setlocale(LC_xxx, NULL)
at the time the locale data is changed. All setlocale(LC_xxx, NULL)
calls only return pointer to strings created earlier.
- Cygwin or, better, newlib, also return a pointer to global strings.
However, while the global strings for the specific categories are
created when the locale is changed, the string returned for LC_ALL
gets created on the fly when setlocale(LC_ALL, NULL) is called.
That's why test-setlocale_null-mt-all fails almost immediately.
I created a patch to newlib's setlocale to tweak the LC_ALL string
each time the locale is changed, while setlocale(LC_ALL, NULL)
just returns the already prepared string.
https://cygwin.com/git/?p=newlib-cygwin.git;a=commitdiff;h=23e49b18ce39
This patch will be in the next Cygwin release 3.4.6.
I'm just a bit fuzzy what patches will be required for gnulib now...
Thanks,
Corinna
- [PATCH] Do not decorate symbols as dllexport on Cygwin, Corinna Vinschen, 2023/02/05
- Re: [PATCH] Do not decorate symbols as dllexport on Cygwin, Bruno Haible, 2023/02/05
- Re: [PATCH] Do not decorate symbols as dllexport on Cygwin, Bruno Haible, 2023/02/05
- Re: [PATCH] Do not decorate symbols as dllexport on Cygwin, Corinna Vinschen, 2023/02/05
- Re: [PATCH] Do not decorate symbols as dllexport on Cygwin,
Corinna Vinschen <=
- Re: [PATCH] Do not decorate symbols as dllexport on Cygwin, Bruno Haible, 2023/02/06
- Re: [PATCH] Do not decorate symbols as dllexport on Cygwin, Bruno Haible, 2023/02/06
- Re: [PATCH] Do not decorate symbols as dllexport on Cygwin, Corinna Vinschen, 2023/02/06
- Re: [PATCH] Do not decorate symbols as dllexport on Cygwin, Bruno Haible, 2023/02/06
- Re: [PATCH] Do not decorate symbols as dllexport on Cygwin, Corinna Vinschen, 2023/02/06
- Re: [PATCH] Do not decorate symbols as dllexport on Cygwin, Reuben Thomas, 2023/02/06
- Re: [PATCH] Do not decorate symbols as dllexport on Cygwin, Corinna Vinschen, 2023/02/07
- Re: [PATCH] Do not decorate symbols as dllexport on Cygwin, Corinna Vinschen, 2023/02/07
- Re: [PATCH] Do not decorate symbols as dllexport on Cygwin, Reuben Thomas, 2023/02/10
- Re: [PATCH] Do not decorate symbols as dllexport on Cygwin, Bruno Haible, 2023/02/10