mirror of
https://github.com/denoland/deno.git
synced 2024-12-27 17:49:08 -05:00
chore(napi): Remove unstable libuv methods (#17416)
This commit removes the libuv pollyfills introduced with Node-API support. It is too much Node-specific. Most Node-API modules that depend on libuv are already giving up the benefits of Node-API. We should rather encourage modules to use `ThreadSafeFunction` or `AsyncWork` to interface with the event loop. Relevant discussion a few months ago: https://github.com/denoland/deno/pull/13633#discussion_r904916178 cc @bartlomieju
This commit is contained in:
parent
df245ab9ff
commit
f7bb6a0be0
2 changed files with 1 additions and 68 deletions
|
@ -141,8 +141,7 @@ fn napi_module_register(module: *const NapiModule) -> Result {
|
|||
|
||||
#[napi_sym::napi_sym]
|
||||
fn napi_get_uv_event_loop(_env: *mut Env, uv_loop: *mut *mut ()) -> Result {
|
||||
// Don't error out because addons may pass this to
|
||||
// our libuv _polyfills_.
|
||||
// There is no uv_loop in Deno
|
||||
*uv_loop = std::ptr::null_mut();
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -20,69 +20,3 @@ pub mod env;
|
|||
pub mod js_native_api;
|
||||
pub mod threadsafe_functions;
|
||||
pub mod util;
|
||||
|
||||
use std::os::raw::c_int;
|
||||
use std::os::raw::c_void;
|
||||
|
||||
pub type uv_async_t = *mut uv_async;
|
||||
pub type uv_loop_t = *mut c_void;
|
||||
pub type uv_async_cb = extern "C" fn(handle: uv_async_t);
|
||||
|
||||
use deno_core::futures::channel::mpsc;
|
||||
#[repr(C)]
|
||||
pub struct uv_async {
|
||||
pub data: Option<*mut c_void>,
|
||||
callback: uv_async_cb,
|
||||
sender: Option<
|
||||
mpsc::UnboundedSender<deno_runtime::deno_napi::PendingNapiAsyncWork>,
|
||||
>,
|
||||
ref_sender: Option<
|
||||
mpsc::UnboundedSender<deno_runtime::deno_napi::ThreadSafeFunctionStatus>,
|
||||
>,
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn uv_default_loop() -> uv_loop_t {
|
||||
std::ptr::null_mut()
|
||||
}
|
||||
|
||||
/// # Safety
|
||||
/// libuv APIs
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn uv_async_init(
|
||||
_loop: uv_loop_t,
|
||||
async_: uv_async_t,
|
||||
cb: uv_async_cb,
|
||||
) -> c_int {
|
||||
(*async_).callback = cb;
|
||||
deno_runtime::deno_napi::ASYNC_WORK_SENDER.with(|sender| {
|
||||
(*async_).sender = Some(sender.borrow().clone().unwrap());
|
||||
});
|
||||
|
||||
deno_runtime::deno_napi::THREAD_SAFE_FN_SENDER.with(|sender| {
|
||||
sender
|
||||
.borrow()
|
||||
.clone()
|
||||
.unwrap()
|
||||
.unbounded_send(deno_runtime::deno_napi::ThreadSafeFunctionStatus::Alive)
|
||||
.unwrap();
|
||||
(*async_).ref_sender = Some(sender.borrow().clone().unwrap());
|
||||
});
|
||||
|
||||
0
|
||||
}
|
||||
|
||||
/// # Safety
|
||||
/// libuv APIs
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn uv_async_send(async_: uv_async_t) -> c_int {
|
||||
let sender = (*async_).sender.as_ref().unwrap();
|
||||
let fut = Box::new(move || {
|
||||
((*async_).callback)(async_);
|
||||
});
|
||||
|
||||
match sender.unbounded_send(fut) {
|
||||
Ok(_) => 0,
|
||||
Err(_) => 1,
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue