diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2021-05-12 10:42:42 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2021-05-12 16:36:20 +0200 |
commit | 330db1f15d95537e288b4c371a26e43b5a9b2196 (patch) | |
tree | 48cd3779bc7849bd0252da28e7b957a2a6c6c615 /libbuild2/adhoc-rule-cxx.cxx | |
parent | 88379eedeae654391711d8cdda17dfc2be6367ef (diff) |
Deal with helper thread starvation during phase switching
The implemented solution entails shadowing old phase queues so that helpers
don't pick up old phase tasks and boosting the max_threads count so that we
can create more helpers if all the existing ones are stuck in the old phase.
Diffstat (limited to 'libbuild2/adhoc-rule-cxx.cxx')
-rw-r--r-- | libbuild2/adhoc-rule-cxx.cxx | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/libbuild2/adhoc-rule-cxx.cxx b/libbuild2/adhoc-rule-cxx.cxx index ece687f..1066f0a 100644 --- a/libbuild2/adhoc-rule-cxx.cxx +++ b/libbuild2/adhoc-rule-cxx.cxx @@ -297,6 +297,10 @@ namespace build2 auto_thread_env penv (nullptr); context& ctx (*t.ctx.module_context); + // Enter a scheduler sub-phase. + // + scheduler::phase_guard pg (ctx.sched); + // Mark the queue so that we don't work any tasks that may already be // there. // |