22#include < node_api.h>
33#include < node_api_types.h>
44
5+ #include < assert.h>
56#include < cstdio>
67#include < cstdlib>
7- #include < functional>
88#include < type_traits>
9+ #include < utility>
910
1011template <typename R, auto func, typename ... Args>
1112inline auto call (const char * name, Args&&... args) -> R {
@@ -31,43 +32,23 @@ inline auto call(const char* name, Args&&... args) -> R {
3132
3233class Context {
3334 public:
34- ~Context () {
35- std::fprintf (stderr, " Context: destructor called\n " );
36- get = [](void *) {
37- std::abort ();
38- return 0 ;
39- };
40- }
41-
42- std::function<int *(int )> create = [](int value) {
43- std::fprintf (stderr, " Context: create called\n " );
44- return new int (value);
45- };
46-
47- std::function<int (void *)> get = [](void * ptr) {
48- std::fprintf (stderr, " Context: get called\n " );
49- return *static_cast <int *>(ptr);
50- };
51-
52- std::function<void (void *)> deleter = [](void * ptr) {
53- std::fprintf (stderr, " Context: deleter called\n " );
54- delete static_cast <int *>(ptr);
55- };
35+ enum class State { kCreated , kCalled } state = State::kCreated ;
5636};
5737
58- void tsfn_callback (napi_env env, napi_value js_cb, void * ctx_p, void * data) {
38+ void tsfn_callback (napi_env env,
39+ napi_value js_cb,
40+ void * ctx_p,
41+ void * /* data */ ) {
5942 auto ctx = static_cast <Context*>(ctx_p);
60- std::fprintf (stderr, " tsfn_callback: env=%p data=%d \n " , env, ctx-> get (data) );
61- ctx->deleter (data) ;
43+ assert (ctx-> state == Context::State:: kCreated );
44+ ctx->state = Context::State:: kCalled ;
6245}
6346
64- void tsfn_finalize (napi_env env, void * finalize_data, void * finalize_hint) {
47+ void tsfn_finalize (napi_env env,
48+ void * /* finalize_data */ ,
49+ void * finalize_hint) {
6550 auto ctx = static_cast <Context*>(finalize_hint);
66- std::fprintf (stderr,
67- " tsfn_finalize: env=%p finalize_data=%p finalize_hint=%p\n " ,
68- env,
69- finalize_data,
70- finalize_hint);
51+ assert (ctx->state == Context::State::kCalled );
7152 delete ctx;
7253}
7354
@@ -88,11 +69,8 @@ auto run(napi_env env, napi_callback_info info) -> napi_value {
8869 ctx,
8970 tsfn_callback);
9071
91- NAPI_CALL (void ,
92- napi_call_threadsafe_function,
93- tsfn,
94- ctx->create (1 ),
95- napi_tsfn_blocking);
72+ NAPI_CALL (
73+ void , napi_call_threadsafe_function, tsfn, nullptr , napi_tsfn_blocking);
9674
9775 NAPI_CALL (void , napi_unref_threadsafe_function, env, tsfn);
9876
0 commit comments