Skip to content

Commit

Permalink
fix(napi): napi_create_async_work incorrect argument (#1392) (#1396)
Browse files Browse the repository at this point in the history
The third argument to `napi_create_async_work` (async_resource_name)
should be a `napi_value` that corresponds to a null-terminated utf-8
string.

This resolves errors running Next.js with GraalVM.

oracle/graal#5582
oracle/graal#5581
  • Loading branch information
patrickpilch committed Dec 16, 2022
1 parent 6ad1740 commit 486ce35
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions crates/napi/src/async_work.rs
@@ -1,4 +1,4 @@
use std::ffi::CStr;
use std::ffi::CString;
use std::mem;
use std::os::raw::c_void;
use std::ptr;
Expand Down Expand Up @@ -60,12 +60,18 @@ pub fn run<T: Task>(
napi_async_work: ptr::null_mut(),
status: task_status.clone(),
}));
let async_work_name = unsafe { CStr::from_bytes_with_nul_unchecked(b"napi_rs_async_work\0") };
let mut async_work_name = ptr::null_mut();
let s = "napi_rs_async_work";
let len = s.len();
let s = CString::new(s)?;
check_status!(unsafe {
sys::napi_create_string_utf8(env, s.as_ptr(), len, &mut async_work_name)
})?;
check_status!(unsafe {
sys::napi_create_async_work(
env,
raw_resource,
async_work_name.as_ptr() as *mut _,
async_work_name,
Some(execute::<T> as unsafe extern "C" fn(env: sys::napi_env, data: *mut c_void)),
Some(
complete::<T>
Expand Down

0 comments on commit 486ce35

Please sign in to comment.