[Scons-dev] please try latest default branch

Gary Oberbrunner garyo at oberbrunner.com
Tue Jan 28 17:57:26 EST 2014


More results, no fix yet.

The generated file all-defuns.c I mentioned before is definitely part of
the problem. I back-ported the tracing code I wrote to just before Dirk's
memory optimization. In that version, near the beginning of the build
phase something calls node.is_up_to_date() on all-defuns.c and it says it
has changed, due to depending on a dir "mkl" which is in no_state (i.e.
hasn't been evaluated yet). In Dirk's version, this result gets cached,
which seems sensible. But in the old version, when the taskmaster
considers that all-defuns.c node, and calls is_up_to_date(), now it
correctly returns True, because by now the mkl dir has been evaluated and
it's in up-to-date state. So it's definitely the caching that's causing
the trouble, but I don't understand why is_up_to_date should return
different values at different times -- especially go from false to true
before anything's been built. Perhaps there's another bug in the code
which Dirk's patch exposes?

I would think is_up_to_date() should never assume that being unprocessed
(i.e. no_state) means not up-to-date; I'd think it should have scanned the
no_state node before its dependents. Anyone have any clues?



On Sun, Jan 26, 2014 at 11:15 AM, Gary Oberbrunner <garyo at oberbrunner.com>wrote:


> 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

>




--
Gary
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://two.pairlist.net/pipermail/scons-dev/attachments/20140128/fed02bef/attachment.htm>


More information about the Scons-dev mailing list