aboutsummaryrefslogtreecommitdiff
path: root/libbuild2
diff options
context:
space:
mode:
Diffstat (limited to 'libbuild2')
-rw-r--r--libbuild2/context.hxx2
-rw-r--r--libbuild2/context.ixx14
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;
}
}