Revert "core: set PROVIDER type as Persistent class id"
authorBen Noordhuis <info@bnoordhuis.nl>
Thu, 28 May 2015 19:11:12 +0000 (21:11 +0200)
committerBen Noordhuis <info@bnoordhuis.nl>
Thu, 28 May 2015 19:48:44 +0000 (21:48 +0200)
This reverts commit 3c44100558b4e9e48e0e711e38acc91e0f870a9f.

Reverted for breaking node-heapdump[0].

AsyncWrap assigns a class id but does not set a v8::RetainedObjectInfo
provider callback with v8::HeapProfiler::SetWrapperClassInfoProvider().
The result is a null pointer dereference when taking a heap snapshot.

It can probably be solved by setting a generic provider callback inside
the AsyncWrap constructor but that may have performance ramifications
that need to be investigated first.  I move to revert it for now.

[0] https://github.com/bnoordhuis/node-heapdump

PR-URL: https://github.com/nodejs/io.js/pull/1827
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
src/async-wrap-inl.h
src/base-object-inl.h
src/base-object.h

index 0518cd3..bad634d 100644 (file)
@@ -17,8 +17,7 @@ inline AsyncWrap::AsyncWrap(Environment* env,
                             v8::Handle<v8::Object> object,
                             ProviderType provider,
                             AsyncWrap* parent)
-    : BaseObject(env, object, provider),
-      bits_(static_cast<uint32_t>(provider) << 1) {
+    : BaseObject(env, object), bits_(static_cast<uint32_t>(provider) << 1) {
   // Check user controlled flag to see if the init callback should run.
   if (!env->using_asyncwrap())
     return;
index 775b073..db0daa1 100644 (file)
 
 namespace node {
 
-inline BaseObject::BaseObject(Environment* env,
-                              v8::Local<v8::Object> handle,
-                              const uint16_t class_id)
+inline BaseObject::BaseObject(Environment* env, v8::Local<v8::Object> handle)
     : handle_(env->isolate(), handle),
       env_(env) {
   CHECK_EQ(false, handle.IsEmpty());
-  // Shift value 8 bits over to try avoiding conflict with anything else.
-  if (class_id != 0)
-    handle_.SetWrapperClassId(class_id << 8);
 }
 
 
index 90abee4..5a7b958 100644 (file)
@@ -9,9 +9,7 @@ class Environment;
 
 class BaseObject {
  public:
-  BaseObject(Environment* env,
-             v8::Local<v8::Object> handle,
-             const uint16_t class_id = 0);
+  BaseObject(Environment* env, v8::Local<v8::Object> handle);
   virtual ~BaseObject();
 
   // Returns the wrapped object.  Returns an empty handle when