src: use symbol to store `AsyncWrap` resource
Use a symbol on the bindings object to store the public resource object,
rather than a v8::Global
Persistent. This has several advantages:
- It’s harder to inadvertently create memory leaks this way.
The garbage collector sees the
AsyncWrap
→ resource link like a regular JS property, and can collect the objects as a group, even if the resource object should happen to point back to theAsyncWrap
object. - This will make it easier in the future to use
owner_symbol
for this purpose, which is generally the direction we should be moving theasync_hooks
API into (i.e. using more public objects instead of letting internal wires stick out).
Checklist
-
make -j4 test
(UNIX), orvcbuild test
(Windows) passes -
commit message follows commit guidelines