diff options
author | Trevor Norris <trev.norris@gmail.com> | 2015-06-03 15:31:33 -0600 |
---|---|---|
committer | Trevor Norris <trev.norris@gmail.com> | 2015-06-17 12:58:39 -0600 |
commit | e56758a5e0ff6822e3105c0e69eb49accc42393c (patch) | |
tree | 25cc1ce181450f78f4dbce2a8d4489752c35cf7b /src/async-wrap-inl.h | |
parent | 5d0cee46bb90084e6dcd584deb5bc893862ce3b3 (diff) | |
download | android-node-v8-e56758a5e0ff6822e3105c0e69eb49accc42393c.tar.gz android-node-v8-e56758a5e0ff6822e3105c0e69eb49accc42393c.tar.bz2 android-node-v8-e56758a5e0ff6822e3105c0e69eb49accc42393c.zip |
async-wrap: add provider id and object info cb
Re-add the wrapper class id to AsyncWrap instances so they can be
tracked directly in a heapdump.
Previously the class id was given without setting the heap dump wrapper
class info provider. Causing a segfault when a heapdump was taken. This
has been added, and the label_ set to the given provider name so each
instance can be identified.
The id will not be set of the passed object has no internal field count.
As the class pointer cannot be retrieved from the object.
In order to properly report the allocated size of each class, the new
pure virtual method self_size() has been introduces.
PR-URL: https://github.com/nodejs/io.js/pull/1896
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Diffstat (limited to 'src/async-wrap-inl.h')
-rw-r--r-- | src/async-wrap-inl.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/async-wrap-inl.h b/src/async-wrap-inl.h index bad634ddaf..5841c58faf 100644 --- a/src/async-wrap-inl.h +++ b/src/async-wrap-inl.h @@ -18,6 +18,11 @@ inline AsyncWrap::AsyncWrap(Environment* env, ProviderType provider, AsyncWrap* parent) : BaseObject(env, object), bits_(static_cast<uint32_t>(provider) << 1) { + // Only set wrapper class id if object will be Wrap'd. + if (object->InternalFieldCount() > 0) + // Shift provider value over to prevent id collision. + persistent().SetWrapperClassId(NODE_ASYNC_ID_OFFSET + provider); + // Check user controlled flag to see if the init callback should run. if (!env->using_asyncwrap()) return; |