Skip to content

napi_threadsafe_function -- Segmentation fault: 11 #1387

Closed
@jazz-soft

Description

@jazz-soft
  • 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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions