about summary refs log tree commit diff
path: root/third_party/nix/src/nix/installables.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2020-04-16T14·28+0200
committertazjin <mail@tazj.in>2020-07-17T20·04+0000
commit80eaa1eaf9dde0caa4e983374fb1356aed67c8e1 (patch)
treeca4a33da8de115e888234252ecdd6629b3e8b9d3 /third_party/nix/src/nix/installables.cc
parent014436eb4ad0c403647939a2461e1fe4a7967c89 (diff)
feat(3p/nix): Add function to allocate a Value in traceable memory r/1354
Backported from:
https://github.com/NixOS/nix/commit/b3e5eea4a91400fb2a12aba4b07a94d03ba54605
https://github.com/NixOS/nix/commit/fcd048a526bd239fa615457e77d61d69d679bf03

Intentionally skipped because we have not backported the JSON changes:
https://github.com/NixOS/nix/commit/9f46f54de4e55267df492456fc0393f74616366b

Did not apply changes ni primops.cc, because those look suspect and
are also based on something that we don't have in our tree.

Change-Id: I837787ce9f2c90267bc39fce15177980d209d4e9
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1253
Tested-by: BuildkiteCI
Reviewed-by: isomer <isomer@tvl.fyi>
Diffstat (limited to 'third_party/nix/src/nix/installables.cc')
-rw-r--r--third_party/nix/src/nix/installables.cc16
1 files changed, 7 insertions, 9 deletions
diff --git a/third_party/nix/src/nix/installables.cc b/third_party/nix/src/nix/installables.cc
index cc001d37f3..c6cfc4344f 100644
--- a/third_party/nix/src/nix/installables.cc
+++ b/third_party/nix/src/nix/installables.cc
@@ -1,8 +1,6 @@
 #include <regex>
 #include <utility>
 
-#include <gc/gc.h>
-
 #include "libexpr/attr-path.hh"
 #include "libexpr/common-eval-args.hh"
 #include "libexpr/eval-inline.hh"
@@ -26,7 +24,7 @@ SourceExprCommand::SourceExprCommand() {
 
 Value* SourceExprCommand::getSourceExpr(EvalState& state) {
   if (vSourceExpr != nullptr) {
-    return vSourceExpr.get();
+    return *vSourceExpr;
   }
 
   auto sToplevel = state.symbols.Create("_toplevel");
@@ -34,18 +32,18 @@ Value* SourceExprCommand::getSourceExpr(EvalState& state) {
   // Allocate the vSourceExpr Value as uncollectable. Boehm GC doesn't
   // consider the member variable "alive" during execution causing it to be
   // GC'ed in the middle of evaluation.
-  vSourceExpr = std::allocate_shared<Value>(traceable_allocator<Value>());
+  vSourceExpr = allocRootValue(state.allocValue());
 
   if (!file.empty()) {
-    state.evalFile(lookupFileArg(state, file), *vSourceExpr);
+    state.evalFile(lookupFileArg(state, file), **vSourceExpr);
   } else {
     /* Construct the installation source from $NIX_PATH. */
 
     auto searchPath = state.getSearchPath();
 
-    state.mkAttrs(*vSourceExpr, 1024);
+    state.mkAttrs(**vSourceExpr, 1024);
 
-    mkBool(*state.allocAttr(*vSourceExpr, sToplevel), true);
+    mkBool(*state.allocAttr(**vSourceExpr, sToplevel), true);
 
     std::unordered_set<std::string> seen;
 
@@ -61,7 +59,7 @@ Value* SourceExprCommand::getSourceExpr(EvalState& state) {
                   state.getBuiltin("nixPath"));
       Value* v2 = state.allocValue();
       mkApp(*v2, *v1, mkString(*state.allocValue(), name));
-      mkApp(*state.allocAttr(*vSourceExpr, state.symbols.Create(name)),
+      mkApp(*state.allocAttr(**vSourceExpr, state.symbols.Create(name)),
             state.getBuiltin("import"), *v2);
     };
 
@@ -79,7 +77,7 @@ Value* SourceExprCommand::getSourceExpr(EvalState& state) {
     }
   }
 
-  return vSourceExpr.get();
+  return *vSourceExpr;
 }
 
 ref<EvalState> SourceExprCommand::getEvalState() {