[Scons-dev] please try latest default branch
Gary Oberbrunner
garyo at oberbrunner.com
Sun Jan 26 11:15:03 EST 2014
I'm continuing to track this down. No solid results so far (but I'm
adding lots of tracing code). I have a generated source file,
all-defuns.c, that depends (using Depends) on a dir (mkl), and it
seems like with the new code while the taskmaster is checking
all-defuns.obj it checks all-defuns.c, which calls Dir.changed() on
the dir, which just checks the node.state -- and the state is
no_state, i.e. it hasn't been evaluated yet, which changed()
interprets as being changed, so it decides to regenerate the source
file all-defuns.c. Later, when the taskmaster gets to checking the
mkl dir, it finds all of its children are up to date and marks it up
to date, but it's too late by then. I suspect (?) something in the
taskmaster updates but will have to keep poking at it.
On Tue, Jan 14, 2014 at 1:39 PM, Dirk Bächle <tshortik at gmx.de> wrote:
> On 14.01.2014 14:44, Gary Oberbrunner wrote:
>>
>> OK, I'll try that. I guess the approach should be to set a new
>> (temporary) flag in the node when its executor is released, and then print a
>> stack trace if any node with that flag set gets its changed() method called?
>>
> This flag already exists and it's called "self.released_target_info" (check
> the end of the relase_target_info() method).
> Then you want to use the KeyError exception path in File.changed() like
> this:
>
> if node is None:
>
> try:
> return self._memo['changed']
> except KeyError:
> if self.released_target_info:
> # We have no executor anymore, but the cached "changed"
> # value doesn't exist either -> print stacktrace!
>
>
> Dirk
>
>
> _______________________________________________
> Scons-dev mailing list
> Scons-dev at scons.org
> http://two.pairlist.net/mailman/listinfo/scons-dev
--
Gary
More information about the Scons-dev
mailing list