• Home
  • Raw
  • Download

Lines Matching +full:hook +full:- +full:run +full:- +full:in +full:- +full:context

1 #include "async_wrap-inl.h"
2 #include "env-inl.h"
5 #include "memory_tracker-inl.h"
12 #include "threadpoolwork-inl.h"
14 #include "util-inl.h"
19 node_napi_env__::node_napi_env__(v8::Local<v8::Context> context, in node_napi_env__() argument
21 : napi_env__(context), filename(module_filename) { in node_napi_env__()
26 return node_env()->can_call_into_js(); in can_call_into_js()
31 return ab->SetPrivate(context(), in mark_arraybuffer_as_untransferable()
32 node_env()->untransferable_object_private_symbol(), in mark_arraybuffer_as_untransferable()
37 // we need to keep the env live until the finalizer has been run in CallFinalizer()
41 node_env()->SetImmediate( in CallFinalizer()
44 v8::HandleScope handle_scope(env->isolate); in CallFinalizer()
45 v8::Context::Scope context_scope(env->context()); in CallFinalizer()
46 env->CallIntoModule([&](napi_env env) { cb(env, data, hint); }); in CallFinalizer()
60 finalizer->_finalize_data = data; in FinalizeBufferCallback()
63 static_cast<node_napi_env>(finalizer->_env)->node_env(); in FinalizeBufferCallback()
64 node_env->SetImmediate( in FinalizeBufferCallback()
66 if (finalizer->_finalize_callback == nullptr) return; in FinalizeBufferCallback()
68 v8::HandleScope handle_scope(finalizer->_env->isolate); in FinalizeBufferCallback()
69 v8::Context::Scope context_scope(finalizer->_env->context()); in FinalizeBufferCallback()
71 finalizer->_env->CallIntoModule([&](napi_env env) { in FinalizeBufferCallback()
72 finalizer->_finalize_callback( in FinalizeBufferCallback()
74 finalizer->_finalize_data, in FinalizeBufferCallback()
75 finalizer->_finalize_hint); in FinalizeBufferCallback()
88 NewEnv(v8::Local<v8::Context> context, const std::string& module_filename) { in NewEnv() argument
91 result = new node_napi_env__(context, module_filename); in NewEnv()
93 // napi_env when its v8::Context was garbage collected; in NewEnv()
94 // However, as long as N-API addons using this napi_env are in place, in NewEnv()
95 // the Context needs to be accessible and alive. in NewEnv()
96 // Ideally, we'd want an on-addon-unload hook that takes care of this in NewEnv()
97 // once all N-API addons using this napi_env are unloaded. in NewEnv()
98 // For now, a per-Environment cleanup hook is the best we can do. in NewEnv()
99 result->node_env()->AddCleanupHook( in NewEnv()
101 static_cast<napi_env>(arg)->Unref(); in NewEnv()
111 v8::Exception::CreateMessage(env->isolate, local_err); in trigger_fatal_exception()
112 node::errors::TriggerUncaughtException(env->isolate, local_err, local_msg); in trigger_fatal_exception()
127 AsyncResource(env_->isolate, in ThreadSafeFunction()
129 *v8::String::Utf8Value(env_->isolate, name)), in ThreadSafeFunction()
133 context(context_), in ThreadSafeFunction()
140 ref.Reset(env->isolate, func); in ThreadSafeFunction()
141 node::AddEnvironmentCleanupHook(env->isolate, Cleanup, this); in ThreadSafeFunction()
142 env->Ref(); in ThreadSafeFunction()
146 node::RemoveEnvironmentCleanupHook(env->isolate, Cleanup, this); in ~ThreadSafeFunction()
147 env->Unref(); in ~ThreadSafeFunction()
153 node::Mutex::ScopedLock lock(this->mutex); in Push()
161 cond->Wait(lock); in Push()
168 thread_count--; in Push()
179 node::Mutex::ScopedLock lock(this->mutex); in Acquire()
191 node::Mutex::ScopedLock lock(this->mutex); in Release()
197 thread_count--; in Release()
203 cond->Signal(lock); in Release()
214 call_js_cb(nullptr, nullptr, context, queue.front()); in EmptyQueueAndDelete()
223 uv_loop_t* loop = env->node_env()->event_loop(); in Init()
233 env->node_env()->CloseHandle( in Init()
235 [](uv_handle_t* handle) -> void { in Init()
242 // Prevent the thread-safe function from being deleted here, because in Init()
264 inline void* Context() { in Context() function in v8impl::__anon32282c820311::ThreadSafeFunction
265 return context; in Context()
275 while (has_more && --iterations_left != 0) { in Dispatch()
296 node::Mutex::ScopedLock lock(this->mutex); in DispatchOne()
306 cond->Signal(lock); in DispatchOne()
308 size--; in DispatchOne()
315 cond->Signal(lock); in DispatchOne()
326 v8::HandleScope scope(env->isolate); in DispatchOne()
331 v8::Local<v8::Function>::New(env->isolate, ref); in DispatchOne()
334 env->CallIntoModule([&](napi_env env) { in DispatchOne()
335 call_js_cb(env, js_callback, context, data); in DispatchOne()
343 v8::HandleScope scope(env->isolate); in Finalize()
346 env->CallIntoModule([&](napi_env env) { in Finalize()
347 finalize_cb(env, finalize_data, context); in Finalize()
354 v8::HandleScope scope(env->isolate); in CloseHandlesAndMaybeDelete()
356 node::Mutex::ScopedLock lock(this->mutex); in CloseHandlesAndMaybeDelete()
359 cond->Signal(lock); in CloseHandlesAndMaybeDelete()
366 env->node_env()->CloseHandle( in CloseHandlesAndMaybeDelete()
368 [](uv_handle_t* handle) -> void { in CloseHandlesAndMaybeDelete()
372 ts_fn->Finalize(); in CloseHandlesAndMaybeDelete()
388 static void CallJs(napi_env env, napi_value cb, void* context, void* data) { in CallJs() argument
412 ts_fn->Dispatch(); in AsyncCb()
417 ->CloseHandlesAndMaybeDelete(true); in Cleanup()
438 void* context; member in v8impl::__anon32282c820311::ThreadSafeFunction
451 * Compared to node::AsyncResource, the resource object in AsyncContext is
452 * gc-able. AsyncContext holds a weak reference to the resource object.
463 async_id_ = node_env()->new_async_id(); in AsyncContext()
464 trigger_async_id_ = node_env()->get_default_trigger_async_id(); in AsyncContext()
465 resource_.Reset(node_env()->isolate(), resource_object); in AsyncContext()
504 env_->open_callback_scopes++; in OpenCallbackScope()
510 const v8::HandleScope handle_scope(node_env()->isolate()); in EnsureReference()
511 resource_.Reset(node_env()->isolate(), in EnsureReference()
512 v8::Object::New(node_env()->isolate())); in EnsureReference()
517 inline node::Environment* node_env() { return env_->node_env(); } in node_env()
519 return resource_.Get(node_env()->isolate()); in resource()
529 env->open_callback_scopes--; in CloseCallbackScope()
534 async_context->resource_.Reset(); in WeakCallback()
535 async_context->lost_reference_ = true; in WeakCallback()
542 : node::CallbackScope(async_context->node_env(), in CallbackScope()
543 async_context->resource_.Get( in CallbackScope()
544 async_context->node_env()->isolate()), in CallbackScope()
545 async_context->async_context()) {} in CallbackScope()
559 // Intercepts the Node-V8 module registration callback. Converts parameters
564 v8::Local<v8::Context> context, in napi_module_register_cb() argument
566 napi_module_register_by_symbol(exports, module, context, in napi_module_register_cb()
567 static_cast<const napi_module*>(priv)->nm_register_func); in napi_module_register_cb()
572 v8::Local<v8::Context> context, in napi_module_register_by_symbol() argument
574 node::Environment* node_env = node::Environment::GetCurrent(context); in napi_module_register_by_symbol()
578 node_env->ThrowError( in napi_module_register_by_symbol()
583 // We set `env->filename` from `module.filename` here, but we could just as in napi_module_register_by_symbol()
584 // easily add a private property to `exports` in `process.dlopen`, which in napi_module_register_by_symbol()
589 if (module->ToObject(context).ToLocal(&modobj) && in napi_module_register_by_symbol()
590 modobj->Get(context, node_env->filename_string()).ToLocal(&filename_js) && in napi_module_register_by_symbol()
591 filename_js->IsString()) { in napi_module_register_by_symbol()
592 node::Utf8Value filename(node_env->isolate(), filename_js); // Cast in napi_module_register_by_symbol()
602 napi_env env = v8impl::NewEnv(context, module_filename); in napi_module_register_by_symbol()
605 env->CallIntoModule([&](napi_env env) { in napi_module_register_by_symbol()
609 // If register function returned a non-null exports object different from in napi_module_register_by_symbol()
622 -1, in napi_module_to_node_module()
623 mod->nm_flags | NM_F_DELETEME, in napi_module_to_node_module()
625 mod->nm_filename, in napi_module_to_node_module()
628 mod->nm_modname, in napi_module_to_node_module()
648 node::AddEnvironmentCleanupHook(env->isolate, fun, arg); in napi_add_env_cleanup_hook()
659 node::RemoveEnvironmentCleanupHook(env->isolate, fun, arg); in napi_remove_env_cleanup_hook()
671 handle_ = node::AddEnvironmentCleanupHook(env->isolate, Hook, this); in napi_async_cleanup_hook_handle__()
672 env->Ref(); in napi_async_cleanup_hook_handle__()
681 // a call to a N-API function would destroy `env` synchronously. in ~napi_async_cleanup_hook_handle__()
682 static_cast<node_napi_env>(env_)->node_env() in ~napi_async_cleanup_hook_handle__()
683 ->SetImmediate([env = env_](node::Environment*) { env->Unref(); }); in ~napi_async_cleanup_hook_handle__()
686 static void Hook(void* data, void (*done_cb)(void*), void* done_data) { in Hook() function
689 handle->done_cb_ = done_cb; in Hook()
690 handle->done_data_ = done_data; in Hook()
691 handle->user_hook_(handle, handle->user_data_); in Hook()
704 napi_async_cleanup_hook hook, in napi_add_async_cleanup_hook() argument
708 CHECK_ARG(env, hook); in napi_add_async_cleanup_hook()
711 new napi_async_cleanup_hook_handle__(env, hook, arg); in napi_add_async_cleanup_hook()
778 *result = node_async_context->OpenCallbackScope(); in napi_open_callback_scope()
788 if (env->open_callback_scopes == 0) { in napi_close_callback_scope()
806 v8::Isolate* isolate = env->isolate; in napi_async_init()
807 v8::Local<v8::Context> context = env->context(); in napi_async_init() local
812 CHECK_TO_OBJECT(env, context, v8_resource, async_resource); in napi_async_init()
820 CHECK_TO_STRING(env, context, v8_resource_name, async_resource_name); in napi_async_init()
859 v8::Local<v8::Context> context = env->context(); in napi_make_callback() local
862 CHECK_TO_OBJECT(env, context, v8recv, recv); in napi_make_callback()
871 env->isolate, in napi_make_callback()
880 callback_result = node_async_context->MakeCallback( in napi_make_callback()
907 v8::MaybeLocal<v8::Object> maybe = node::Buffer::New(env->isolate, length); in napi_create_buffer()
931 v8::Isolate* isolate = env->isolate; in napi_create_external_buffer()
964 env->isolate, in napi_create_buffer_copy()
1037 // Wrapper around uv_work_t which calls user-provided callbacks.
1046 : AsyncResource(env->isolate, in Work()
1048 *v8::String::Utf8Value(env->isolate, async_resource_name)), in Work()
1049 ThreadPoolWork(env->node_env()), in Work()
1082 // Also it is needed for the exception-handling below. in AfterThreadPoolWork()
1083 v8::HandleScope scope(_env->isolate); in AfterThreadPoolWork()
1087 _env->CallIntoModule([&](napi_env env) { in AfterThreadPoolWork()
1090 // If there was an unhandled exception in the complete callback, in AfterThreadPoolWork()
1130 v8::Local<v8::Context> context = env->context(); in napi_create_async_work() local
1134 CHECK_TO_OBJECT(env, context, resource, async_resource); in napi_create_async_work()
1136 resource = v8::Object::New(env->isolate); in napi_create_async_work()
1140 CHECK_TO_STRING(env, context, resource_name, async_resource_name); in napi_create_async_work()
1166 *loop = reinterpret_cast<node_napi_env>(env)->node_env()->event_loop(); in napi_get_uv_event_loop()
1179 w->ScheduleWork(); in napi_queue_async_work()
1190 CALL_UV(env, w->CancelWork()); in napi_cancel_async_work()
1204 void* context, in napi_create_threadsafe_function() argument
1221 v8::Local<v8::Context> v8_context = env->context(); in napi_create_threadsafe_function()
1225 v8_resource = v8::Object::New(env->isolate); in napi_create_threadsafe_function()
1238 context, in napi_create_threadsafe_function()
1249 status = ts_fn->Init(); in napi_create_threadsafe_function()
1264 *result = reinterpret_cast<v8impl::ThreadSafeFunction*>(func)->Context(); in napi_get_threadsafe_function_context()
1273 return reinterpret_cast<v8impl::ThreadSafeFunction*>(func)->Push(data, in napi_call_threadsafe_function()
1280 return reinterpret_cast<v8impl::ThreadSafeFunction*>(func)->Acquire(); in napi_acquire_threadsafe_function()
1287 return reinterpret_cast<v8impl::ThreadSafeFunction*>(func)->Release(mode); in napi_release_threadsafe_function()
1293 return reinterpret_cast<v8impl::ThreadSafeFunction*>(func)->Unref(); in napi_unref_threadsafe_function()
1299 return reinterpret_cast<v8impl::ThreadSafeFunction*>(func)->Ref(); in napi_ref_threadsafe_function()
1306 *result = static_cast<node_napi_env>(env)->GetFilename(); in node_api_get_module_file_name()