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>
99
1010template <typename R, auto func, typename ... Args>
@@ -31,37 +31,23 @@ inline auto call(const char* name, Args&&... args) -> R {
3131
3232class Context {
3333 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- };
34+ enum class State { kCreated , kCalled } state = State::kCreated ;
5035};
5136
52- void tsfn_callback (napi_env env, napi_value js_cb, void * ctx_p, void * data) {
37+ void tsfn_callback (napi_env env,
38+ napi_value js_cb,
39+ void * ctx_p,
40+ void * /* data */ ) {
5341 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) ;
42+ assert (ctx-> state == Context::State:: kCreated );
43+ ctx->state = Context::State:: kCalled ;
5644}
5745
58- void tsfn_finalize (napi_env env, void * finalize_data, void * finalize_hint) {
46+ void tsfn_finalize (napi_env env,
47+ void * /* finalize_data */ ,
48+ void * finalize_hint) {
5949 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);
50+ assert (ctx->state == Context::State::kCalled );
6551 delete ctx;
6652}
6753
@@ -82,11 +68,8 @@ auto run(napi_env env, napi_callback_info info) -> napi_value {
8268 ctx,
8369 tsfn_callback);
8470
85- NAPI_CALL (void ,
86- napi_call_threadsafe_function,
87- tsfn,
88- ctx->create (1 ),
89- napi_tsfn_blocking);
71+ NAPI_CALL (
72+ void , napi_call_threadsafe_function, tsfn, nullptr , napi_tsfn_blocking);
9073
9174 NAPI_CALL (void , napi_unref_threadsafe_function, env, tsfn);
9275
0 commit comments