Closed
Description
- Node.js Version: 10.6.0
- OS: MacOS 10.13.6
- Scope (install, code, runtime, meta, other?): N-API
- Module (and version) (if relevant): node-gyp
Getting segmentation fault on exit in MacOS and Linux, no error output in Windows.
Have I missed something in the c++ code?
Sorry, the documentation at https://nodejs.org/api/n-api.html#n_api_asynchronous_thread_safe_function_calls was a bit unclear...
Thank you!
#define NAPI_EXPERIMENTAL
#include <node_api.h>
#include <iostream>
namespace test {
napi_threadsafe_function TSF;
napi_value my_thread(napi_env env, napi_callback_info args)
{
std::cout << "my_thread...\n";
napi_value value;
napi_get_undefined(env, &value);
return value;
}
void my_finalize(napi_env env, void* finalize_data, void* finalize_hint)
{
std::cout << "my_finalize...\n";
}
void my_callback(napi_env env, napi_value js_callback, void* context, void* data)
{
std::cout << "my_callback...\n";
}
napi_value start(napi_env env, napi_callback_info args)
{
std::cout << "start...\n";
napi_value func;
napi_value str;
napi_create_function(env, 0, 0, my_thread, 0, &func);
napi_create_string_utf8(env, "no_name", NAPI_AUTO_LENGTH, &str);
napi_create_threadsafe_function(env, func, 0, str, 0, 1, 0, my_finalize, 0, my_callback, &TSF);
napi_value value;
napi_get_undefined(env, &value);
return value;
}
napi_value stop(napi_env env, napi_callback_info args)
{
std::cout << "stop...\n";
napi_release_threadsafe_function(TSF, napi_tsfn_release);
napi_unref_threadsafe_function(env, TSF);
napi_value value;
napi_get_undefined(env, &value);
return value;
}
napi_value init(napi_env env, napi_value exports)
{
napi_value value;
// incorrect function signature at https://nodejs.org/api/n-api.html#n_api_napi_create_function_1
napi_create_function(env, "start", NAPI_AUTO_LENGTH, start, 0, &value);
napi_set_named_property(env, exports, "start", value);
// incorrect function signature at https://nodejs.org/api/n-api.html#n_api_napi_create_function_1
napi_create_function(env, "stop", NAPI_AUTO_LENGTH, stop, 0, &value);
napi_set_named_property(env, exports, "stop", value);
return exports;
}
NAPI_MODULE(NODE_GYP_MODULE_NAME, init)
} // namespace test
var test = require('.');
test.start();
test.stop();
setTimeout(function() {
console.log('done!');
}, 500);
Metadata
Metadata
Assignees
Labels
No labels