diff --git a/src/libstore/include/nix/store/builtins.hh b/src/libstore/include/nix/store/builtins.hh index 3385fd9fc..096c8af7b 100644 --- a/src/libstore/include/nix/store/builtins.hh +++ b/src/libstore/include/nix/store/builtins.hh @@ -19,12 +19,15 @@ using BuiltinBuilder = std::function; struct RegisterBuiltinBuilder { typedef std::map BuiltinBuilders; - static BuiltinBuilders * builtinBuilders; + + static BuiltinBuilders & builtinBuilders() { + static BuiltinBuilders builders; + return builders; + } RegisterBuiltinBuilder(const std::string & name, BuiltinBuilder && fun) { - if (!builtinBuilders) builtinBuilders = new BuiltinBuilders; - builtinBuilders->insert_or_assign(name, std::move(fun)); + builtinBuilders().insert_or_assign(name, std::move(fun)); } }; diff --git a/src/libstore/unix/build/derivation-builder.cc b/src/libstore/unix/build/derivation-builder.cc index dd08ff8bd..d416228dc 100644 --- a/src/libstore/unix/build/derivation-builder.cc +++ b/src/libstore/unix/build/derivation-builder.cc @@ -1835,9 +1835,6 @@ void setupSeccomp() } -RegisterBuiltinBuilder::BuiltinBuilders * RegisterBuiltinBuilder::builtinBuilders = nullptr; - - void DerivationBuilderImpl::runChild() { /* Warning: in the child we should absolutely not make any SQLite @@ -2298,7 +2295,7 @@ void DerivationBuilderImpl::runChild() std::string builtinName = drv.builder.substr(8); assert(RegisterBuiltinBuilder::builtinBuilders); - if (auto builtin = get(*RegisterBuiltinBuilder::builtinBuilders, builtinName)) + if (auto builtin = get(RegisterBuiltinBuilder::builtinBuilders(), builtinName)) (*builtin)(ctx); else throw Error("unsupported builtin builder '%1%'", builtinName);