about summary refs log tree commit diff
path: root/third_party/nix/src/libexpr/attr-set.hh
diff options
context:
space:
mode:
authorKane York <kanepyork@gmail.com>2020-08-01T21·11-0700
committerkanepyork <rikingcoding@gmail.com>2020-08-01T21·16+0000
commitf7a85c5060301bcbd2fb71881de8b65226cacd81 (patch)
treed4ef8b9552d8e8f7124347137cc48152b7af6416 /third_party/nix/src/libexpr/attr-set.hh
parent3fdce7c6be52bd2b86bd8a75c06f27f94b753c4f (diff)
fix(3p/nix/expr): use traceable_allocator for btree_map r/1530
The prior use of gc_allocator meant that the btree nodes themselves were being collected. Additionally, have Attr (contains a Value) and Bindings explicitly inherit from gc, even though Bindings is always allocated under `new (GC)`.

Detected by running under GC_ENABLE_INCREMENTAL=1.

Change-Id: Iacf13b34b5aa12e417ea87c9b46e2bf9199fdb26
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1544
Reviewed-by: glittershark <grfn@gws.fyi>
Tested-by: BuildkiteCI
Diffstat (limited to '')
-rw-r--r--third_party/nix/src/libexpr/attr-set.hh6
1 files changed, 3 insertions, 3 deletions
diff --git a/third_party/nix/src/libexpr/attr-set.hh b/third_party/nix/src/libexpr/attr-set.hh
index b918bf30ff..a9db0db856 100644
--- a/third_party/nix/src/libexpr/attr-set.hh
+++ b/third_party/nix/src/libexpr/attr-set.hh
@@ -14,7 +14,7 @@ class EvalState;
 struct Value;
 
 /* Map one attribute name to its value. */
-struct Attr {
+struct Attr : public gc {
   Symbol name;
   Value* value;  // TODO(tazjin): Who owns this?
   Pos* pos;      // TODO(tazjin): Who owns this?
@@ -26,9 +26,9 @@ struct Attr {
 // allocator explicitly specified.
 using AttributeMap =
     absl::btree_map<Symbol, Attr, std::less<Symbol>,
-                    gc_allocator<std::pair<const Symbol, Attr>>>;
+                    traceable_allocator<std::pair<const Symbol, Attr>>>;
 
-class Bindings {
+class Bindings : public gc {
  public:
   typedef AttributeMap::iterator iterator;