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,37 +32,23 @@ inline auto call(const char* name, Args&&... args) -> R {
3132
3233class Context {
3334 public:
34- ~Context () { std::fprintf (stderr, " Context: destructor called\n " ); }
35-
36- std::function<int *(int )> create = [](int value) {
37- std::fprintf (stderr, " Context: create called\n " );
38- return new int (value);
39- };
40-
41- std::function<int (void *)> get = [](void * ptr) {
42- std::fprintf (stderr, " Context: get called\n " );
43- return *static_cast <int *>(ptr);
44- };
45-
46- std::function<void (void *)> deleter = [](void * ptr) {
47- std::fprintf (stderr, " Context: deleter called\n " );
48- delete static_cast <int *>(ptr);
49- };
35+ enum class State { kCreated , kCalled } state = State::kCreated ;
5036};
5137
52- 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 */ ) {
5342 auto ctx = static_cast <Context*>(ctx_p);
54- std::fprintf (stderr, " tsfn_callback: env=%p data=%d \n " , env, ctx-> get (data) );
55- ctx->deleter (data) ;
43+ assert (ctx-> state == Context::State:: kCreated );
44+ ctx->state = Context::State:: kCalled ;
5645}
5746
58- 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) {
5950 auto ctx = static_cast <Context*>(finalize_hint);
60- std::fprintf (stderr,
61- " tsfn_finalize: env=%p finalize_data=%p finalize_hint=%p\n " ,
62- env,
63- finalize_data,
64- finalize_hint);
51+ assert (ctx->state == Context::State::kCalled );
6552 delete ctx;
6653}
6754
@@ -82,11 +69,8 @@ auto run(napi_env env, napi_callback_info info) -> napi_value {
8269 ctx,
8370 tsfn_callback);
8471
85- NAPI_CALL (void ,
86- napi_call_threadsafe_function,
87- tsfn,
88- ctx->create (1 ),
89- napi_tsfn_blocking);
72+ NAPI_CALL (
73+ void , napi_call_threadsafe_function, tsfn, nullptr , napi_tsfn_blocking);
9074
9175 NAPI_CALL (void , napi_unref_threadsafe_function, env, tsfn);
9276
0 commit comments