|
Boost-Build : |
Subject: Re: [Boost-build] question(s) about bjam code
From: Stefan Seefeld (stefan_at_[hidden])
Date: 2017-10-13 14:55:04
On 13.10.2017 10:45, Stefan Seefeld wrote:
> On 05.10.2017 22:31, Steven Watanabe via Boost-build wrote:
>> AMDG
>>
>> On 10/05/2017 08:12 PM, Stefan Seefeld via Boost-build wrote:
>>> <snip>
>>> I'm looking at
>>> https://github.com/boostorg/build/blob/develop/src/engine/make1.c#L326, and
>>> wonder why, despite the inline comment above the referenced line, this is not
>>> the first statement to be executed in the make1a function. I understand that the
>>> make1a function may be called multiple times from different locations, but
>>> should be ignored (i.e., should be a noop) in all but one case.
>>>
>>> However, each time the function is called, its parent's async counter is
>>> incremented (as long as this target 's progress is not yet RUNNING).
>>>
>> Example:
>>
>> A depends on C
>> B depends on C
>>
>> We enter make1a for C twice, once with each parent,
>> A and B. A and B both need to wait for C to complete,
>> hence we increment the async counter both times.
>>
>> We only skip this if C has already completed, and
>> no waiting is required.
>
> Fair enough. However, if the parent counter is incremented, shouldn't
> there also (directly or indirectly) be a MAKE1B state that is pushed
> onto the stack for that parent ?
> This happens if the child target hasn't started processing, but it
> doesn't if it's already on the stack.
Never mind, I think I see where this happens:
https://github.com/boostorg/build/blob/develop/src/engine/make1.c#L649-L657
Stefan
-- ...ich hab' noch einen Koffer in Berlin...
Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk