Re: [PATCH cygport] lib/src_postinst.cygpart: parallelize __prepstrip
Jon Turney via Cygwin-apps <[email protected]> Thu, 18 Dec 2025 18:28:43 +0000
| Newsgroups | gmane.os.cygwin.applications |
|---|---|
| Message-ID | <[email protected]> |
On 30/11/2025 14:09, ASSI via Cygwin-apps wrote:
> Jon Turney via Cygwin-apps writes:
>> The problem is we have a process which goes something like:
>>
>> - check if F has an existing debuglink section, if so stop
>> - otherwise, extract symbols from F to F.dbg
>> - strip symbols from F
>> - add a debuglink section to F pointing to F.dbg
>>
>> ... which is run in parallel for F=(A, B, C) (which are all hardlinks
>> for the same file).
>>
>> So we end up with {A,B,C}.dbg, which are all the same, and only one of
>> them is actually used.
>>
>> Except sometimes one of the processes loses the race, so doesn't do
>> anything because the debuglink already exists.
>>
>> (which results in a non-deterministic set of files in the output
>> package archive, which makes the test I've added fail...)
>
> So something like wrapping the whole sequence in
>
> (
> unset __fd
> {__fd}<${exe}
Woah! Shell wizardry! TIL:
"Each redirection that may be preceded by a file descriptor number may
instead be preceded by a word of the form {varname}. In this case, for
each redirection operator [...], the shell will allocate a file
descriptor greater than or equal to 10 and assign it to varname."
It seems like this needs to be preceded by 'exec or ':' to have the
desired effect, though.
> flock ${__fd} # maybe we'd want '-w ${timeout}' here
> # …whatever…
> )
>
> should fix it?
I guess this isn't completely deterministic (in that we'll get exactly
one of A, B or C.dbg), but it's certainly an improvement!
Applied, thanks!