【问题标题】:Nodejs Addons uv_queue_work segmentation faultNodejs插件uv_queue_work分段错误
【发布时间】:2015-04-26 16:46:37
【问题描述】:

我正在尝试创建一个非常小的 nodejs 插件示例。 我的 C++ 代码是这样的:

void __sleep(uv_work_t* req) {
    usleep(1000 * 1000 * 5); // = 5seconds
}

void after(uv_work_t *handle, int status) {
    printf("After\n");
}

Handle<Value> foo(const Arguments& args) {
    HandleScope scope;
    uv_loop_t *loop = uv_default_loop();
    uv_work_t req;
    uv_queue_work(loop, &req, __sleep, after);
    return scope.Close(Undefined());
}

void InitAll(Handle<Object> exports, Handle<Object> module) {
    NODE_SET_METHOD(exports, "foo", foo);
}

NODE_MODULE("myModule", InitAll)

在js中,这个:

console.log(myModule);
myModule.foo();
console.log("started sleeping...");

当我调用myModule.foo 函数时,进程会因分段错误而终止。

我尝试添加uv_run(loop, UV_RUN_DEFAULT),但这会阻塞主线程。

我哪里做错了? 谢谢

【问题讨论】:

    标签: c++ node.js libuv


    【解决方案1】:

    问题是req 在堆栈上分配并在foo 返回时被释放。您需要在堆上分配它(使用newmalloc)并在完成后手动释放它(例如,在after 回调中)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多