aboutsummaryrefslogtreecommitdiff
path: root/build2/b.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2019-10-22 10:02:23 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2019-10-22 10:17:41 +0200
commitb47a323f09f1f9ccece03ca4d84dbe7a47ff8177 (patch)
tree7c520e5878b1988425520424c5e372f7439636d9 /build2/b.cxx
parent1bbd6bdb1bbf6783aefd10392e5c0599318a927f (diff)
Move global mutex shards to context
Diffstat (limited to 'build2/b.cxx')
-rw-r--r--build2/b.cxx27
1 files changed, 12 insertions, 15 deletions
diff --git a/build2/b.cxx b/build2/b.cxx
index d6b364d..0183e0f 100644
--- a/build2/b.cxx
+++ b/build2/b.cxx
@@ -556,19 +556,15 @@ main (int argc, char* argv[])
fail << "invalid --max-jobs|-J value";
}
- sched.startup (jobs,
- 1,
- max_jobs,
- jobs * ops.queue_depth (),
- (ops.max_stack_specified ()
- ? optional<size_t> (ops.max_stack () * 1024)
- : nullopt));
-
- // @@ CTX: should these be per-context?
- //
- variable_cache_mutex_shard_size = sched.shard_size ();
- variable_cache_mutex_shard.reset (
- new shared_mutex[variable_cache_mutex_shard_size]);
+ sched.startup (jobs,
+ 1,
+ max_jobs,
+ jobs * ops.queue_depth (),
+ (ops.max_stack_specified ()
+ ? optional<size_t> (ops.max_stack () * 1024)
+ : nullopt));
+
+ global_mutex_shards mutex_shards (sched.shard_size ());
// Trace some overall environment information.
//
@@ -588,10 +584,11 @@ main (int argc, char* argv[])
// below).
//
unique_ptr<context> ctx;
- auto new_context = [&ctx, &sched, &cmd_vars]
+ auto new_context = [&ctx, &sched, &mutex_shards, &cmd_vars]
{
ctx = nullptr; // Free first.
ctx.reset (new context (sched,
+ mutex_shards,
ops.dry_run (),
!ops.serial_stop () /* keep_going */,
cmd_vars));
@@ -1425,7 +1422,7 @@ main (int argc, char* argv[])
continue;
// If we have a directory, enter the scope, similar to how we do
- // it in the context's reset().
+ // it in the context ctor.
//
scope& s (o.dir
? sm.insert ((out_base / *o.dir).normalize ())->second