diff --git a/src/libstore/include/nix/store/store-api.hh b/src/libstore/include/nix/store/store-api.hh index d5e3d5214..678c00d8d 100644 --- a/src/libstore/include/nix/store/store-api.hh +++ b/src/libstore/include/nix/store/store-api.hh @@ -902,12 +902,15 @@ struct StoreFactory struct Implementations { - static std::vector * registered; + static std::vector & registered() + { + static std::vector registered; + return registered; + } template static void add() { - if (!registered) registered = new std::vector(); StoreFactory factory{ .uriSchemes = TConfig::uriSchemes(), .create = @@ -919,7 +922,7 @@ struct Implementations -> std::shared_ptr { return std::make_shared(StringMap({})); }) }; - registered->push_back(factory); + registered().push_back(factory); } }; diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc index e9e982e61..49bbaecd7 100644 --- a/src/libstore/store-api.cc +++ b/src/libstore/store-api.cc @@ -1355,7 +1355,7 @@ ref openStore(StoreReference && storeURI) return std::make_shared(params); }, [&](const StoreReference::Specified & g) { - for (const auto & implem : *Implementations::registered) + for (const auto & implem : Implementations::registered()) if (implem.uriSchemes.count(g.scheme)) return implem.create(g.scheme, g.authority, params); @@ -1399,6 +1399,4 @@ std::list> getDefaultSubstituters() return stores; } -std::vector * Implementations::registered = 0; - } diff --git a/src/nix/main.cc b/src/nix/main.cc index eff2634e2..351fcd1b6 100644 --- a/src/nix/main.cc +++ b/src/nix/main.cc @@ -193,7 +193,7 @@ struct NixArgs : virtual MultiCommand, virtual MixCommonArgs, virtual RootArgs res["args"] = toJSON(); auto stores = nlohmann::json::object(); - for (auto & implem : *Implementations::registered) { + for (auto & implem : Implementations::registered()) { auto storeConfig = implem.getConfig(); auto storeName = storeConfig->name(); auto & j = stores[storeName];