tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

import-gc.js (1615B)


      1 // |jit-test| --no-baseline; --no-blinterp
      2 // Turn off baseline and since it messes up the GC finalization assertions by
      3 // adding spurious edges to the GC graph.
      4 
      5 const Module = WebAssembly.Module;
      6 const Instance = WebAssembly.Instance;
      7 
      8 const m1 = new Module(wasmTextToBinary(`(module (func $f) (export "f" (func $f)))`));
      9 const m2 = new Module(wasmTextToBinary(`(module (import "a" "f" (func)) (func $f) (export "g" (func $f)))`));
     10 
     11 // Imported instance objects should stay alive as long as any importer is alive.
     12 resetFinalizeCount();
     13 var i1 = new Instance(m1);
     14 var i2 = new Instance(m2, {a:i1.exports});
     15 var f = i1.exports.f;
     16 var g = i2.exports.g;
     17 i1.edge = makeFinalizeObserver();
     18 i2.edge = makeFinalizeObserver();
     19 f.edge = makeFinalizeObserver();
     20 g.edge = makeFinalizeObserver();
     21 gc();
     22 assertEq(finalizeCount(), 0);
     23 i1.exports = null;
     24 f = null;
     25 gc();
     26 assertEq(finalizeCount(), 0);
     27 i2 = null;
     28 gc();
     29 assertEq(finalizeCount(), 0);
     30 i1 = null;
     31 gc();
     32 assertEq(finalizeCount(), 0);
     33 g = null;
     34 gc();
     35 assertEq(finalizeCount(), 4);
     36 
     37 // ...but the importee doesn't keep the importer alive.
     38 resetFinalizeCount();
     39 var i1 = new Instance(m1);
     40 var i2 = new Instance(m2, {a:i1.exports});
     41 var f = i1.exports.f;
     42 var g = i2.exports.g;
     43 i1.edge = makeFinalizeObserver();
     44 i2.edge = makeFinalizeObserver();
     45 f.edge = makeFinalizeObserver();
     46 g.edge = makeFinalizeObserver();
     47 gc();
     48 assertEq(finalizeCount(), 0);
     49 i2.exports = null;
     50 g = null;
     51 gc();
     52 assertEq(finalizeCount(), 0);
     53 i2 = null;
     54 gc();
     55 assertEq(finalizeCount(), 2);
     56 i1.exports = null;
     57 f = null;
     58 gc();
     59 assertEq(finalizeCount(), 2);
     60 i1 = null;
     61 gc();
     62 assertEq(finalizeCount(), 4);