reearth / quickjs-emscripten-sync

Provides a way to sync objects between browser and QuickJS
MIT License
64 stars 7 forks source link

Possible to synchronize vm -> host -> vm? #4

Open emilmuller opened 3 years ago

emilmuller commented 3 years ago

Hi

I'm trying to compare objects which crosses from VM -> host -> VM. This seems to fail. See the example below. Is it possible to add support for this? :)

Kind regards, Emil

(async () => {
    const vm = (await getQuickJS()).createVm();
    const arena = new Arena(vm, { isMarshalable: true });

    function test(obj) {
        return obj;
    }

    arena.expose({ test });
    console.log(arena.evalCode(`let foo = {}; foo === test(foo)`)); // I want this to log 'true', but it logs 'false'

    arena.dispose();
    vm.dispose();
})();

Also, thanks for this great library! :)

emilmuller commented 3 years ago

Interestingly, a slight modification of the above code produces an error:

(async () => {
    const vm = (await getQuickJS()).createVm();
    const arena = new Arena(vm, { isMarshalable: true });

    function test(obj) {
        return obj;
    }

    arena.expose({ test });
    console.log(arena.evalCode(`let foo = test({}); foo === test(foo)`)); // Modified let foo = test({});

    arena.dispose();
    vm.dispose();
})();

image

Occurs at vm.dispose()

Some handle not disposed? Memory leak?

rot1024 commented 2 years ago

Thank you for reporting. It seems a bug and should be fixed.