Nodejs Addons uv_queue_work 分段错误
Nodejs Addons uv_queue_work segmentation fault
我正在尝试创建一个非常小的 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)
但这会阻塞主线程。
我哪里错了?
谢谢
问题是 req
在堆栈上分配,并在 foo
returns 时被释放。您需要在堆上分配它(使用 new
或 malloc
)并在完成后手动释放它(例如,在 after
回调中)
我正在尝试创建一个非常小的 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)
但这会阻塞主线程。
我哪里错了? 谢谢
问题是 req
在堆栈上分配,并在 foo
returns 时被释放。您需要在堆上分配它(使用 new
或 malloc
)并在完成后手动释放它(例如,在 after
回调中)