[PATCH v3] localedata: Avoid concurrently written locales in gen-locale.sh
Florian Weimer
fweimer@redhat.com
Wed Jul 8 13:14:29 GMT 2026
* Florian Weimer:
> There is no cross-directory exclusion of concurrent $(gen-locales)
> usage. Parallel localedef calls can clobber locale data as it is
> being loaded by tests.
>
> With --no-hard-links, the separate touch invocation is now longer
> necessary.
>
> ---
> v2: Avoid mv options. Probably more portable.
> v3: Add missing mkdir call. Test is still running.
> localedata/gen-locale.sh | 26 ++++++++++++++++++--------
> 1 file changed, 18 insertions(+), 8 deletions(-)
>
> diff --git a/localedata/gen-locale.sh b/localedata/gen-locale.sh
> index 4762c04284..013d26eafb 100644
> --- a/localedata/gen-locale.sh
> +++ b/localedata/gen-locale.sh
> @@ -32,17 +32,27 @@ generate_locale ()
> out=$3
> flags=$4
> ret=0
> +
> + # Use a staging area to avoid writing to locales concurrently.
> + # While this process is running, $$ is sufficiently unique.
> + # Use --no-hard-links to prevent localedef from accessing
> + # other staging areas.
> + stage="${common_objpfx}localedata/gen-locale.$$.tmp"
> + mkdir "$stage" 2>/dev/null || true
Oh well. With these changes, --no-hard-links is no longer needed
(no peer directories to check). Should I leave it in?
Thanks,
Florian
More information about the Libc-alpha
mailing list