@@ -4272,7 +4272,7 @@ inline ThreadSafeFunctionEx<ContextType> ThreadSafeFunctionEx<ContextType>::New(
42724272 ContextType* context,
42734273 Finalizer finalizeCallback,
42744274 FinalizerDataType* data,
4275- napi_threadsafe_function_call_js call_js_cb) {
4275+ ThreadSafeFunctionCallJS call_js_cb) {
42764276 return New (env, callback, resource, resourceName, maxQueueSize,
42774277 initialThreadCount, context, finalizeCallback, data,
42784278 details::ThreadSafeFinalize<ContextType, Finalizer,
@@ -4362,7 +4362,7 @@ inline ThreadSafeFunctionEx<ContextType> ThreadSafeFunctionEx<ContextType>::New(
43624362 Finalizer finalizeCallback,
43634363 FinalizerDataType* data,
43644364 napi_finalize wrapper,
4365- napi_threadsafe_function_call_js call_js_cb) {
4365+ ThreadSafeFunctionCallJS call_js_cb) {
43664366 static_assert (details::can_make_string<ResourceString>::value
43674367 || std::is_convertible<ResourceString, napi_value>::value,
43684368 " Resource name should be convertible to the string type" );
@@ -4372,7 +4372,15 @@ inline ThreadSafeFunctionEx<ContextType> ThreadSafeFunctionEx<ContextType>::New(
43724372 FinalizerDataType>({ data, finalizeCallback });
43734373 napi_status status = napi_create_threadsafe_function (env, callback, resource,
43744374 Value::From (env, resourceName), maxQueueSize, initialThreadCount,
4375- finalizeData, wrapper, context, call_js_cb, &tsfn._tsfn );
4375+ finalizeData, wrapper, context,
4376+ // [=](napi_env env, napi_value jsCallback, void* context, void* data) {
4377+ // if (env == nullptr && jsCallback == nullptr) {
4378+ // return;
4379+ // }
4380+ // call_js_cb( Napi::Env(env), Function(env, jsCallback), static_cast<ContextType*>(context), data);
4381+ // },
4382+ CallJS,
4383+ &tsfn._tsfn );
43764384 if (status != napi_ok) {
43774385 delete finalizeData;
43784386 NAPI_THROW_IF_FAILED (env, status, ThreadSafeFunctionEx<ContextType>());
@@ -4381,6 +4389,23 @@ inline ThreadSafeFunctionEx<ContextType> ThreadSafeFunctionEx<ContextType>::New(
43814389 return tsfn;
43824390}
43834391
4392+ template <typename ContextType>
4393+ inline void
4394+ ThreadSafeFunctionEx<ContextType>::CallJS(napi_env env, napi_value jsCallback,
4395+ void *context, void *data) {
4396+ if (env == nullptr && jsCallback == nullptr ) {
4397+ return ;
4398+ }
4399+
4400+ if (data != nullptr ) {
4401+ auto * callbackWrapper = static_cast <CallbackWrapper*>(data);
4402+ (*callbackWrapper)(env, Function (env, jsCallback));
4403+ delete callbackWrapper;
4404+ } else if (jsCallback != nullptr ) {
4405+ Function (env, jsCallback).Call ({});
4406+ }
4407+ }
4408+
43844409// //////////////////////////////////////////////////////////////////////////////
43854410// ThreadSafeFunction class
43864411// //////////////////////////////////////////////////////////////////////////////
0 commit comments