[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