From 6d700e3601a3469981995fd364d1a1ff7f158e5e Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 23 Oct 2019 12:21:08 +0200 Subject: Un-tune scheduler when building build system modules --- libbuild2/module.cxx | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'libbuild2/module.cxx') diff --git a/libbuild2/module.cxx b/libbuild2/module.cxx index 45cbd30..b73ddb3 100644 --- a/libbuild2/module.cxx +++ b/libbuild2/module.cxx @@ -243,11 +243,25 @@ namespace build2 diag_frame::stack_guard diag_cutoff (nullptr); auto df = make_diag_frame ( - [&loc, &mod](const diag_record& dr) + [&loc, &mod] (const diag_record& dr) { dr << info (loc) << "while loading build system module " << mod; }); + // Un-tune the scheduler. + // + // Note that we can only do this if we are running serially because + // otherwise we cannot guarantee the scheduler is idle (we could + // have waiting threads from the outer context). This is fine for + // now since the only two tuning level we use are serial and full + // concurrency (turns out currently we don't really need this: we + // will always be called during load or match phases and we always + // do parallel match; but let's keep it in case things change). + // + auto sched_tune (ctx.sched.serial () + ? scheduler::tune_guard (ctx.sched, 0) + : scheduler::tune_guard ()); + // Note that for now we suppress progress since it would clash with // the progress of what we are already doing (maybe in the future we // can do save/restore but then we would need some sort of -- cgit v1.1