summaryrefslogtreecommitdiff
path: root/cli/napi/async.rs
diff options
context:
space:
mode:
authorsnek <the@snek.dev>2024-06-10 09:20:44 -0700
committerGitHub <noreply@github.com>2024-06-10 16:20:44 +0000
commite3b2ee183bc7497ec0432bc764678f5eda6495a7 (patch)
tree7a5fa0208ef56cb83fa6bae9bad0bc89334ed533 /cli/napi/async.rs
parent7c5dbd5d54770dba5e56442b633e9597403ef5da (diff)
fix: Rewrite Node-API (#24101)
Phase 1 node-api rewrite
Diffstat (limited to 'cli/napi/async.rs')
-rw-r--r--cli/napi/async.rs102
1 files changed, 0 insertions, 102 deletions
diff --git a/cli/napi/async.rs b/cli/napi/async.rs
deleted file mode 100644
index 115aa742d..000000000
--- a/cli/napi/async.rs
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
-
-use deno_runtime::deno_napi::*;
-
-use crate::check_env;
-use crate::napi::threadsafe_functions::SendPtr;
-
-#[repr(C)]
-pub struct AsyncWork {
- pub data: *mut c_void,
- pub execute: napi_async_execute_callback,
- pub complete: napi_async_complete_callback,
-}
-
-unsafe impl Send for AsyncWork {}
-unsafe impl Sync for AsyncWork {}
-
-#[napi_sym::napi_sym]
-fn napi_create_async_work(
- _env: *mut Env,
- _async_resource: napi_value,
- _async_resource_name: napi_value,
- execute: napi_async_execute_callback,
- complete: napi_async_complete_callback,
- data: *mut c_void,
- result: *mut napi_async_work,
-) -> napi_status {
- let mut work = AsyncWork {
- data,
- execute,
- complete,
- };
- let work_box = Box::new(work);
- *result = transmute::<*mut AsyncWork, _>(Box::into_raw(work_box));
- napi_ok
-}
-
-#[napi_sym::napi_sym]
-fn napi_cancel_async_work(
- _env: &mut Env,
- _async_work: napi_async_work,
-) -> napi_status {
- napi_ok
-}
-
-/// Frees a previously allocated work object.
-#[napi_sym::napi_sym]
-fn napi_delete_async_work(
- _env: &mut Env,
- work: napi_async_work,
-) -> napi_status {
- let work = Box::from_raw(work as *mut AsyncWork);
- drop(work);
-
- napi_ok
-}
-
-#[napi_sym::napi_sym]
-fn napi_queue_async_work(
- env_ptr: *mut Env,
- work: napi_async_work,
-) -> napi_status {
- let work: &AsyncWork = &*(work as *const AsyncWork);
- let Some(env) = env_ptr.as_mut() else {
- return napi_invalid_arg;
- };
-
- let send_env = SendPtr(env_ptr);
-
- #[inline(always)]
- fn do_work(ptr: SendPtr<Env>, work: &AsyncWork) {
- // SAFETY: This is a valid async work queue call and it runs on the event loop thread
- unsafe {
- (work.execute)(ptr.0 as napi_env, work.data);
- (work.complete)(ptr.0 as napi_env, napi_ok, work.data);
- }
- }
-
- env.add_async_work(move || do_work(send_env, work));
-
- napi_ok
-}
-
-// NOTE: we don't support "async_hooks::AsyncContext" so these APIs are noops.
-#[napi_sym::napi_sym]
-fn napi_async_init(
- env: *mut Env,
- _async_resource: napi_value,
- _async_resource_name: napi_value,
- result: *mut *mut (),
-) -> napi_status {
- check_env!(env);
- *result = ptr::null_mut();
- napi_ok
-}
-
-#[napi_sym::napi_sym]
-fn napi_async_destroy(env: *mut Env, async_context: *mut ()) -> napi_status {
- check_env!(env);
- assert!(async_context.is_null());
- napi_ok
-}