Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: bmake inefficiencies



On 2/5/21, Simon J. Gerraty <sjg%juniper.net@localhost> wrote:
> Mateusz Guzik <mjguzik%gmail.com@localhost> wrote:
>
>> [External Email. Be cautious of content]
>>
>>
>> Responding to the original mail due to several follow ups.
>>
>> Thanks for fixups so far.
>>
>> Another note related to JobOpenTmpFile:
>>
>>         JobSigLock(&mask);
>>         tfd = mkTempFile(TMPPAT, &tfile);
>>         if (!DEBUG(SCRIPT))
>>                 (void)eunlink(tfile);
>>         JobSigUnlock(&mask);
>>
>> is the signal stuff really necessary?
>
> It avoids the need to loop dealing with interupts.
> The name seems missleading should be block not lock.
>

I know what it does, it popped up on truss.

My point is that there are no callers of mkTempFile from a signal
handler (and would argue if any were present, they should be fixed)
and the DEBUG stuff seems to only be set at startup time. iow i don't
see any relevance of signal handling to this code.

>> Apart from that, eunlink stats the path and this has happens in
>> default setting. Instead I propose the following: since mkTempFile has
>> only 2 consumers, passing in the buffer can be made mandatory. Then
>> another flag can control when the routine should unlink the result.
>> This would shorten this callsite to roughly:
>>
>> char buf[MAXPATHLATEN];
>> ...
>> tfd = mkTempFile(TMPPAT, buf, sizeof buf, !DEBUG(SCRIPT));
>>
>> which will also save on memory alloc and string coying as the target
>> routine calls bmake_strdup to accomodate the request.
>
> Will take a look.
>


-- 
Mateusz Guzik <mjguzik gmail.com>


Home | Main Index | Thread Index | Old Index