PendingPhantomCallback句柄未在第一个回调中重置

时间:2019-05-02 16:06:07

标签: node.js garbage-collection v8 weak-references node.js-addon

我的node.js程序经常在v8 :: internal :: GlobalHandles :: PendingPhantomCallback中终止,并出现V8致命错误,指出弱引用回调未能进行正确的清理。 V8的致命错误是:“句柄未在第一个回调中重置。”

我不明白这一点,因为我的插件不会创建弱引用或注册回调。我的插件使用N-API ObjectReferences(napi_create_reference)创建引用。全部具有非零的参考计数。我的插件仅使用N-API,并且未注册任何V8特定的弱引用回调。似乎N-API可以解决这个问题?

失败的调用栈是:

node.exe!v8::base::OS::Abort() Line 897 C++
node.exe!V8_Fatal(const char * file, int line, const char * format, ...) Line 171   C++
node.exe!v8::internal::GlobalHandles::PendingPhantomCallback::Invoke(v8::internal::Isolate *) Line 910  C++
node.exe!v8::internal::GlobalHandles::DispatchPendingPhantomCallbacks(bool synchronous_second_pass) Line 870    C++
node.exe!v8::internal::GlobalHandles::PostGarbageCollectionProcessing(v8::internal::GarbageCollector collector, const v8::GCCallbackFlags gc_callback_flags) Line 930   C++
node.exe!v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector collector, const v8::GCCallbackFlags gc_callback_flags) Line 1775  C++
node.exe!v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace space, v8::internal::GarbageCollectionReason gc_reason, const v8::GCCallbackFlags gc_callback_flags) Line 1392    C++
node.exe!v8::internal::Heap::CollectAllGarbage(int) Line 1156   C++
node.exe!v8::internal::Heap::HandleGCRequest() Line 1053    C++
node.exe!v8::internal::StackGuard::HandleInterrupts() Line 517  C++
node.exe!v8::internal::__RT_impl_Runtime_StackGuard(v8::internal::Arguments) Line 270   C++
node.exe!v8::internal::Runtime_StackGuard(int args_length, v8::internal::Object * * args_object, v8::internal::Isolate * isolate) Line 260  C++

我尝试使用node-report运行,以期获得提示,但是即使设置了致命错误处理,在这种情况下也不会调用node-report。

我还验证了我在插件中保存的所有NAPI对象引用都不是弱引用。

如何找出正在引用的对象或保存引用的位置?

0 个答案:

没有答案