diff --git a/src/handle_wrap.cc b/src/handle_wrap.cc index 5b6594a3a90..eb6713edad9 100644 --- a/src/handle_wrap.cc +++ b/src/handle_wrap.cc @@ -99,9 +99,11 @@ Handle HandleWrap::Close(const Arguments& args) { UNWRAP + // guard against uninitialized handle or double close + if (wrap->handle__ == NULL) return v8::Null(); assert(!wrap->object_.IsEmpty()); uv_close(wrap->handle__, OnClose); - + wrap->handle__ = NULL; HandleWrap::Ref(args); @@ -143,6 +145,9 @@ void HandleWrap::OnClose(uv_handle_t* handle) { // The wrap object should still be there. assert(wrap->object_.IsEmpty() == false); + // But the handle pointer should be gone. + assert(wrap->handle__ == NULL); + wrap->object_->SetPointerInInternalField(0, NULL); wrap->object_.Dispose(); wrap->object_.Clear();