diff options
-rw-r--r-- | build2/b.cxx | 6 | ||||
-rw-r--r-- | libbuild2/context.cxx | 4 | ||||
-rw-r--r-- | libbuild2/context.hxx | 13 | ||||
-rw-r--r-- | libbuild2/function.test.cxx | 4 | ||||
-rw-r--r-- | libbuild2/module.cxx | 4 | ||||
-rw-r--r-- | libbuild2/test/script/parser.test.cxx | 4 | ||||
-rw-r--r-- | libbuild2/variable.cxx | 4 | ||||
-rw-r--r-- | libbuild2/variable.hxx | 7 | ||||
-rw-r--r-- | libbuild2/variable.txx | 4 | ||||
-rw-r--r-- | tests/libbuild2/driver.cxx | 4 |
10 files changed, 29 insertions, 25 deletions
diff --git a/build2/b.cxx b/build2/b.cxx index 0183e0f..f2b7674 100644 --- a/build2/b.cxx +++ b/build2/b.cxx @@ -564,7 +564,7 @@ main (int argc, char* argv[]) ? optional<size_t> (ops.max_stack () * 1024) : nullopt)); - global_mutex_shards mutex_shards (sched.shard_size ()); + global_mutexes mutexes (sched.shard_size ()); // Trace some overall environment information. // @@ -584,11 +584,11 @@ main (int argc, char* argv[]) // below). // unique_ptr<context> ctx; - auto new_context = [&ctx, &sched, &mutex_shards, &cmd_vars] + auto new_context = [&ctx, &sched, &mutexes, &cmd_vars] { ctx = nullptr; // Free first. ctx.reset (new context (sched, - mutex_shards, + mutexes, ops.dry_run (), !ops.serial_stop () /* keep_going */, cmd_vars)); diff --git a/libbuild2/context.cxx b/libbuild2/context.cxx index 23942a8..841cc1d 100644 --- a/libbuild2/context.cxx +++ b/libbuild2/context.cxx @@ -56,14 +56,14 @@ namespace build2 context:: context (scheduler& s, - global_mutex_shards& ms, + global_mutexes& ms, bool dr, bool kg, const strings& cmd_vars, optional<context*> mc) : data_ (new data (*this)), sched (s), - mutex_shards (ms), + mutexes (ms), dry_run_option (dr), keep_going (kg), phase_mutex (*this), diff --git a/libbuild2/context.hxx b/libbuild2/context.hxx index cc34803..60f5ba8 100644 --- a/libbuild2/context.hxx +++ b/libbuild2/context.hxx @@ -99,14 +99,19 @@ namespace build2 mutex lm_; }; - class global_mutex_shards + // Context-wide mutexes and mutex shards. + // + class global_mutexes { public: + + // Variable cache mutex shard (see variable.hxx for details). + // size_t variable_cache_size; unique_ptr<shared_mutex[]> variable_cache; explicit - global_mutex_shards (size_t vc) + global_mutexes (size_t vc) : variable_cache_size (vc), variable_cache (new shared_mutex[variable_cache_size]) {} }; @@ -134,7 +139,7 @@ namespace build2 public: scheduler& sched; - global_mutex_shards& mutex_shards; + global_mutexes& mutexes; // Dry run flag (see --dry-run|-n). // @@ -425,7 +430,7 @@ namespace build2 // explicit context (scheduler&, - global_mutex_shards&, + global_mutexes&, bool dry_run = false, bool keep_going = true, const strings& cmd_vars = {}, diff --git a/libbuild2/function.test.cxx b/libbuild2/function.test.cxx index c4f7fa2..3cf2e7c 100644 --- a/libbuild2/function.test.cxx +++ b/libbuild2/function.test.cxx @@ -46,8 +46,8 @@ namespace build2 // Serial execution. // scheduler sched (1); - global_mutex_shards shards (1); - context ctx (sched, shards); + global_mutexes mutexes (1); + context ctx (sched, mutexes); auto& functions (ctx.functions); diff --git a/libbuild2/module.cxx b/libbuild2/module.cxx index a55a1a6..1bd60a6 100644 --- a/libbuild2/module.cxx +++ b/libbuild2/module.cxx @@ -155,12 +155,12 @@ namespace build2 assert (*ctx.module_context_storage == nullptr); // Since we are using the same scheduler, it makes sense to reuse the - // same mutex shards. Also disable nested module context for good + // same global mutexes. Also disable nested module context for good // measure. // ctx.module_context_storage->reset ( new context (ctx.sched, - ctx.mutex_shards, + ctx.mutexes, false, /* dry_run */ ctx.keep_going, ctx.global_var_overrides, /* cmd_vars */ diff --git a/libbuild2/test/script/parser.test.cxx b/libbuild2/test/script/parser.test.cxx index 2eec791..54f6ee7 100644 --- a/libbuild2/test/script/parser.test.cxx +++ b/libbuild2/test/script/parser.test.cxx @@ -159,8 +159,8 @@ namespace build2 // Serial execution. // scheduler sched (1); - global_mutex_shards shards (1); - context ctx (sched, shards); + global_mutexes mutexes (1); + context ctx (sched, mutexes); bool scope (false); bool id (false); diff --git a/libbuild2/variable.cxx b/libbuild2/variable.cxx index 1fe9914..643a061 100644 --- a/libbuild2/variable.cxx +++ b/libbuild2/variable.cxx @@ -367,8 +367,8 @@ namespace build2 // Typification is kind of like caching so we reuse that mutex shard. // shared_mutex& m ( - ctx.mutex_shards.variable_cache[ - hash<value*> () (&v) % ctx.mutex_shards.variable_cache_size]); + ctx.mutexes.variable_cache[ + hash<value*> () (&v) % ctx.mutexes.variable_cache_size]); // Note: v.type is rechecked by typify() under lock. // diff --git a/libbuild2/variable.hxx b/libbuild2/variable.hxx index 29b8200..51cdf49 100644 --- a/libbuild2/variable.hxx +++ b/libbuild2/variable.hxx @@ -1468,10 +1468,9 @@ namespace build2 // the references remain valid). // // Note that since the cache can be modified on any lookup (including during - // the execute phase), it is protected by its own mutex shard (see - // global_mutex_shards in context). This shard is also used for value - // typification (which is kind of like caching) during concurrent execution - // phases. + // the execute phase), it is protected by its own mutex shard (see mutexes + // in context). This shard is also used for value typification (which is + // kind of like caching) during concurrent execution phases. // template <typename K> class variable_cache diff --git a/libbuild2/variable.txx b/libbuild2/variable.txx index ed25cb6..041dc94 100644 --- a/libbuild2/variable.txx +++ b/libbuild2/variable.txx @@ -614,8 +614,8 @@ namespace build2 : 0); shared_mutex& m ( - ctx.mutex_shards.variable_cache[ - hash<variable_cache*> () (this) % ctx.mutex_shards.variable_cache_size]); + ctx.mutexes.variable_cache[ + hash<variable_cache*> () (this) % ctx.mutexes.variable_cache_size]); slock sl (m); ulock ul (m, defer_lock); diff --git a/tests/libbuild2/driver.cxx b/tests/libbuild2/driver.cxx index 26c00d6..d84c22a 100644 --- a/tests/libbuild2/driver.cxx +++ b/tests/libbuild2/driver.cxx @@ -37,8 +37,8 @@ main (int, char* argv[]) // Serial execution. // scheduler sched (1); - global_mutex_shards shards (1); - context ctx (sched, shards); + global_mutexes mutexes (1); + context ctx (sched, mutexes); return 0; } |