PendingPhantomCallback Handle не сбрасывается при первом обратном вызове - PullRequest
0 голосов
/ 02 мая 2019

Моя программа 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++

Я пытался работать с отчетом об узле, в надежде получить подсказку, но даже с установленной обработкой фатальной ошибки, отчет об узле в этом случае не вызывается.

Я также проверил, что все ссылки на объекты NAPI, которые я храню в своем аддоне, не являются слабыми ссылками.

Как я могу узнать, на какой объект ссылаются или где находится ссылка?

...