diff options
-rw-r--r-- | libbuild2/context.hxx | 2 | ||||
-rw-r--r-- | libbuild2/context.ixx | 14 |
2 files changed, 12 insertions, 4 deletions
diff --git a/libbuild2/context.hxx b/libbuild2/context.hxx index 33fc892..828c41e 100644 --- a/libbuild2/context.hxx +++ b/libbuild2/context.hxx @@ -904,7 +904,7 @@ namespace build2 bool unlock_phase = false); void - wait (); + wait (bool work_queue = true); // Note: move-assignable to empty only. // diff --git a/libbuild2/context.ixx b/libbuild2/context.ixx index 6c8c428..2c62a45 100644 --- a/libbuild2/context.ixx +++ b/libbuild2/context.ixx @@ -26,8 +26,11 @@ namespace build2 inline wait_guard:: ~wait_guard () noexcept (false) { + // Don't work our own queue since we are most likely in stack unwinding + // causes by an exception. + // if (task_count != nullptr) - wait (); + wait (false); } inline wait_guard:: @@ -54,10 +57,15 @@ namespace build2 } inline void wait_guard:: - wait () + wait (bool wq) { phase_unlock u (phase ? ctx : nullptr, true /* delay */); - ctx->sched->wait (start_count, *task_count, u); + ctx->sched->wait (start_count, + *task_count, + u, + (wq + ? scheduler::work_queue::work_all + : scheduler::work_queue::work_none)); task_count = nullptr; } } |