summaryrefslogtreecommitdiff
path: root/cli/napi/node_api.rs
diff options
context:
space:
mode:
authorNathan Whitaker <17734409+nathanwhit@users.noreply.github.com>2024-10-02 10:43:42 -0700
committerGitHub <noreply@github.com>2024-10-02 10:43:42 -0700
commitbbd4ae1bc12dc6b34d4a455015096b7113a5cec5 (patch)
tree1d91babfa3fdfe47d0a3b01809081150ede27628 /cli/napi/node_api.rs
parent1837aed79b77b3137563d4730d02e466c85b2b87 (diff)
fix(node): implement libuv APIs needed to support `npm:sqlite3` (#25893)
Fixes #24740. Implements the `uv_mutex_*` and `uv_async_*` APIs. The mutex API is implemented exactly as libuv, a thin wrapper over the OS's native mutex. The async API is implemented in terms of napi_async_work. As documented in the napi docs, you really shouldn't call `napi_queue_async_work` multiple times (it is documented as undefined behavior). However, our implementation doesn't have any issue with this, so I believe it suits our purpose here.
Diffstat (limited to 'cli/napi/node_api.rs')
-rw-r--r--cli/napi/node_api.rs13
1 files changed, 9 insertions, 4 deletions
diff --git a/cli/napi/node_api.rs b/cli/napi/node_api.rs
index 81cb800a7..2efb71c26 100644
--- a/cli/napi/node_api.rs
+++ b/cli/napi/node_api.rs
@@ -547,11 +547,16 @@ fn napi_delete_async_work(env: *mut Env, work: napi_async_work) -> napi_status {
}
#[napi_sym]
-fn napi_get_uv_event_loop(env: *mut Env, uv_loop: *mut *mut ()) -> napi_status {
- let env = check_env!(env);
+fn napi_get_uv_event_loop(
+ env_ptr: *mut Env,
+ uv_loop: *mut *mut (),
+) -> napi_status {
+ let env = check_env!(env_ptr);
check_arg!(env, uv_loop);
- // There is no uv_loop in Deno
- napi_set_last_error(env, napi_generic_failure)
+ unsafe {
+ *uv_loop = env_ptr.cast();
+ }
+ 0
}
#[napi_sym]