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 <tshor...@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@scons.org > http://two.pairlist.net/mailman/listinfo/scons-dev -- Gary _______________________________________________ Scons-dev mailing list Scons-dev@scons.org http://two.pairlist.net/mailman/listinfo/scons-dev