summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard W <garlicbready@googlemail.com>2018-04-14 19:31:32 (GMT)
committerGitHub <noreply@github.com>2018-04-14 19:31:32 (GMT)
commit240e270dbbab754ab36ec6cea8cc7ba3faaa242c (patch)
treef8be0a06fc1e3bc4d9e75bde716ebce0c70050ff /src
parentcc52bda4954ae1327e7d98cfb4418c64a55056ec (diff)
parent31b23ab25707fb494242557e491d84ff594224b7 (diff)
downloadSCons-240e270dbbab754ab36ec6cea8cc7ba3faaa242c.zip
SCons-240e270dbbab754ab36ec6cea8cc7ba3faaa242c.tar.gz
SCons-240e270dbbab754ab36ec6cea8cc7ba3faaa242c.tar.bz2
Merge branch 'master' into master
Diffstat (limited to 'src')
-rw-r--r--src/CHANGES.txt3
-rw-r--r--src/engine/SCons/Taskmaster.py9
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)