attic/nix_store: Only initialize Nix once
This commit is contained in:
parent
365d739bca
commit
fce89f4c95
|
@ -10,6 +10,9 @@
|
||||||
|
|
||||||
#include "attic/src/nix_store/bindings/nix.hpp"
|
#include "attic/src/nix_store/bindings/nix.hpp"
|
||||||
|
|
||||||
|
static std::mutex g_init_nix_mutex;
|
||||||
|
static bool g_init_nix_done = false;
|
||||||
|
|
||||||
static nix::StorePath store_path_from_rust(RBasePathSlice base_name) {
|
static nix::StorePath store_path_from_rust(RBasePathSlice base_name) {
|
||||||
std::string_view sv((const char *)base_name.data(), base_name.size());
|
std::string_view sv((const char *)base_name.data(), base_name.size());
|
||||||
return nix::StorePath(sv);
|
return nix::StorePath(sv);
|
||||||
|
@ -76,7 +79,13 @@ RString CPathInfo::ca() {
|
||||||
|
|
||||||
CNixStore::CNixStore() {
|
CNixStore::CNixStore() {
|
||||||
std::map<std::string, std::string> params;
|
std::map<std::string, std::string> params;
|
||||||
nix::initNix();
|
std::lock_guard<std::mutex> lock(g_init_nix_mutex);
|
||||||
|
|
||||||
|
if (!g_init_nix_done) {
|
||||||
|
nix::initNix();
|
||||||
|
g_init_nix_done = true;
|
||||||
|
}
|
||||||
|
|
||||||
this->store = nix::openStore("auto", params);
|
this->store = nix::openStore("auto", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <mutex>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <nix/store-api.hh>
|
#include <nix/store-api.hh>
|
||||||
#include <nix/local-store.hh>
|
#include <nix/local-store.hh>
|
||||||
|
|
Loading…
Reference in a new issue