diff options
author | Nathan Whitaker <17734409+nathanwhit@users.noreply.github.com> | 2024-10-02 10:43:42 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-02 10:43:42 -0700 |
commit | bbd4ae1bc12dc6b34d4a455015096b7113a5cec5 (patch) | |
tree | 1d91babfa3fdfe47d0a3b01809081150ede27628 /cli/napi/node_api.rs | |
parent | 1837aed79b77b3137563d4730d02e466c85b2b87 (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.rs | 13 |
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] |