aboutsummaryrefslogtreecommitdiff
path: root/build2/operation.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-01-27 15:25:26 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-02-13 12:42:41 +0200
commitf93038fbee1631b95922b0742e0fd00fa8dae02e (patch)
tree6fe67cbde528ee8ded490085b9a8d5adc0ce5aca /build2/operation.cxx
parent267d34d2800d9cc3ed2865cbecf8d32f8f1ab6ec (diff)
Add notion of phase, enforce
Diffstat (limited to 'build2/operation.cxx')
-rw-r--r--build2/operation.cxx36
1 files changed, 22 insertions, 14 deletions
diff --git a/build2/operation.cxx b/build2/operation.cxx
index 0163e04..0ade4bb 100644
--- a/build2/operation.cxx
+++ b/build2/operation.cxx
@@ -74,6 +74,8 @@ namespace build2
{
tracer trace ("search");
+ phase_guard pg (run_phase::search_match);
+
auto i (targets.find (tk, trace));
if (i == targets.end ())
fail (l) << "unknown target " << tk;
@@ -89,25 +91,29 @@ namespace build2
if (verb >= 6)
dump (a);
- scheduler::atomic_count task_count (0);
{
- model_slock ml;
+ phase_guard pg (run_phase::search_match);
- for (void* vt: ts)
+ scheduler::atomic_count task_count (0);
{
- target& t (*static_cast<target*> (vt));
- l5 ([&]{trace << "matching " << t;});
-
- sched.async (task_count,
- [a] (target& t)
- {
- model_slock ml;
- match (ml, a, t); // @@ MT exception handling.
- },
- ref (t));
+ model_slock ml;
+
+ for (void* vt: ts)
+ {
+ target& t (*static_cast<target*> (vt));
+ l5 ([&]{trace << "matching " << t;});
+
+ sched.async (task_count,
+ [a] (target& t)
+ {
+ model_slock ml;
+ match (ml, a, t); // @@ MT exception handling.
+ },
+ ref (t));
+ }
}
+ sched.wait (task_count);
}
- sched.wait (task_count);
if (verb >= 6)
dump (a);
@@ -118,6 +124,8 @@ namespace build2
{
tracer trace ("execute");
+ phase_guard pg (run_phase::execute);
+
// Execute collecting postponed targets (to be re-examined later).
// Do it in reverse order if the execution mode is 'last'.
//