[PATCH v3] localedata: Avoid concurrently written locales in gen-locale.sh
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Wed Jul 8 14:03:44 GMT 2026
On 08/07/26 10:14, Florian Weimer wrote:
> * 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?
I would suggest to remove it, so it makes the command intention clear.
More information about the Libc-alpha
mailing list