diff options
author | Richard W <garlicbready@googlemail.com> | 2018-04-14 19:31:32 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-14 19:31:32 (GMT) |
commit | 240e270dbbab754ab36ec6cea8cc7ba3faaa242c (patch) | |
tree | f8be0a06fc1e3bc4d9e75bde716ebce0c70050ff /src | |
parent | cc52bda4954ae1327e7d98cfb4418c64a55056ec (diff) | |
parent | 31b23ab25707fb494242557e491d84ff594224b7 (diff) | |
download | SCons-240e270dbbab754ab36ec6cea8cc7ba3faaa242c.zip SCons-240e270dbbab754ab36ec6cea8cc7ba3faaa242c.tar.gz SCons-240e270dbbab754ab36ec6cea8cc7ba3faaa242c.tar.bz2 |
Merge branch 'master' into master
Diffstat (limited to 'src')
-rw-r--r-- | src/CHANGES.txt | 3 | ||||
-rw-r--r-- | src/engine/SCons/Taskmaster.py | 9 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt index b7aa9dd..be4e0dd 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -11,6 +11,9 @@ RELEASE 3.1.0.alpha.yyyymmdd - NEW DATE WILL BE INSERTED HERE - Add SConstruct.py and sconstruct.py to the search path for the root SConstruct file. Allows easier debugging within Visual Studio + From Bernard Blackham: + - Fixed handling of side-effects in task master (fixes #3013). + From Daniel Moody: - Set the pickling protocal back to highest which was causing issues with variant dir tests. This will cause issues if reading sconsigns diff --git a/src/engine/SCons/Taskmaster.py b/src/engine/SCons/Taskmaster.py index 17507a6..1522ca2 100644 --- a/src/engine/SCons/Taskmaster.py +++ b/src/engine/SCons/Taskmaster.py @@ -470,14 +470,23 @@ class Task(object): pending_children.discard(t) for p in t.waiting_parents: parents[p] = parents.get(p, 0) + 1 + t.waiting_parents = set() for t in targets: if t.side_effects is not None: for s in t.side_effects: if s.get_state() == NODE_EXECUTING: s.set_state(NODE_NO_STATE) + + # The side-effects may have been transferred to + # NODE_NO_STATE by executed_with{,out}_callbacks, but was + # not taken out of the waiting parents/pending children + # data structures. Check for that now. + if s.get_state() == NODE_NO_STATE and s.waiting_parents: + pending_children.discard(s) for p in s.waiting_parents: parents[p] = parents.get(p, 0) + 1 + s.waiting_parents = set() for p in s.waiting_s_e: if p.ref_count == 0: self.tm.candidates.append(p) |