node.js - 在 node.js 中使用 Node 纤程时,在 GC 期间 V8 内部出现 "Fatal error"

标签 node.js node-fibers

我在运行以下程序时遇到 V8 报告的 fatal error :

var Fiber = require("fibers");
Fiber(function () {});
global.gc();

用于运行它的命令:

> node --expose-gc scratch.js

fatal error 的文本如下:

#
# Fatal error in ..\..\src\global-handles.cc, line 99
# CHECK(state_ != FREE) failed
#

我正在使用以下版本:

  • Node 0.10.25 x86(使用 VC2013 使用 vcbuild x86 Debug 构建)
  • node-fibers 1.0.1 取自 GitHub 存储库(不是 npmjs)

断言失败发生在 gc() 调用之下。这是从 GC 回调回调到 fibers 一直到 ASSERT 语句的调用堆栈:

node.exe!v8::internal::GlobalHandles::Node::Release(v8::internal::GlobalHandles * global_handles) Line 99   C++
node.exe!v8::internal::GlobalHandles::Destroy(v8::internal::Object * * location) Line 431   C++
node.exe!v8::V8::DisposeGlobal(v8::internal::Object * * obj) Line 680   C++
node.exe!v8::Persistent<v8::Object>::Dispose() Line 4241    C++
fibers.node!Fiber::`scalar deleting destructor'(unsigned int)   C++
fibers.node!Fiber::WeakCallback(void * data) Line 235   C++
fibers.node!uni::WeakCallbackShim<&Fiber::WeakCallback>(v8::Persistent<v8::Value> value, void * data) Line 111  C++
node.exe!v8::internal::GlobalHandles::Node::PostGarbageCollectionProcessing(v8::internal::Isolate * isolate, v8::internal::GlobalHandles * global_handles) Line 233 C++

此 fatal error 不会出现在 Release 版本的 Node 中。然而,它似乎巧妙地破坏了 V8 引擎,并最终在一段随机代码中失败了一点。

现在,我想出的唯一解决方法是泄漏光纤,这样这段代码就永远不会被命中。我是不是做错了什么,或者这是 fibers 中的错误?

最佳答案

此错误现在显然已通过此提交修复:

https://github.com/laverdet/node-fibers/commit/3e154941ba5c3234752af304defcf028107e5557

源码/fibers.cc @@ -231,7 +231,6 @@类纤维{ 返回; } - that.handle.Dispose(); 删除 &that; }

关于node.js - 在 node.js 中使用 Node 纤程时,在 GC 期间 V8 内部出现 "Fatal error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21407365/

相关文章:

node.js - Meteor 和 Fibers/bindEnvironment() 是怎么回事?

node.js - 在 Electron 中堆叠上下文菜单

node.js - Discord.JS : How to create permanent and infinite uses invite?

javascript - 设置基本的 Node.js 服务器

javascript - 如何使用 Node.js Fibers 运行代码

node.js - 使用 NPM 包时出现“Meteor code must always run within a Fiber”错误

jQuery 如果单击时不起作用

node.js - 如何在 Node.js 中使用 Prototype.js?

node.js - 为什么meteor.js是同步的?

android - NativeScript 安装错误 - npm Fiber