summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValentin David <valentin.david@codethink.co.uk>2019-01-22 14:03:21 +0100
committerJürg Billeter <j@bitron.ch>2019-01-28 21:30:26 +0000
commita1ab48daf7b572bf857b115898db2d947552a155 (patch)
treed03ba6acc95cb351829db14f11b1e233de43fc22
parent80b36d0c5cf89eb9130642c255d18cbdf296cef0 (diff)
downloadbuildstream-valentindavid/crash_in_scheduler_857.tar.gz
Fix crash when spawned job completes very fastvalentindavid/crash_in_scheduler_857
Job can complete before we return from `Job.span()` to `Scheduler._spawn_job()`, so that `_active_jobs` would not yet contain the job. This would print a stack on the console and try to run a second time the job which can have unexpected effects. In order to reproduce the issue, in `buildstream/_scheduler/jobs/job.py`, in `Job.spawn`, add a call to `time.sleep()` right before call to `asyncio.get_child_watcher()`. This fixes issue #857.
-rw-r--r--buildstream/_scheduler/scheduler.py2
1 files changed, 1 insertions, 1 deletions
diff --git a/buildstream/_scheduler/scheduler.py b/buildstream/_scheduler/scheduler.py
index f35a85b23..176900b33 100644
--- a/buildstream/_scheduler/scheduler.py
+++ b/buildstream/_scheduler/scheduler.py
@@ -314,10 +314,10 @@ class Scheduler():
# job (Job): The job to spawn
#
def _spawn_job(self, job):
- job.spawn()
self._active_jobs.append(job)
if self._job_start_callback:
self._job_start_callback(job)
+ job.spawn()
# Callback for the cache size job
def _cache_size_job_complete(self, status, cache_size):