summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/napi/js_native_api.rs6
-rw-r--r--test_napi/mem_test.js11
-rw-r--r--test_napi/src/lib.rs3
-rw-r--r--test_napi/src/mem.rs34
4 files changed, 53 insertions, 1 deletions
diff --git a/cli/napi/js_native_api.rs b/cli/napi/js_native_api.rs
index 05e07b1e5..62ac40159 100644
--- a/cli/napi/js_native_api.rs
+++ b/cli/napi/js_native_api.rs
@@ -1223,13 +1223,17 @@ fn napi_add_finalizer(
fn napi_adjust_external_memory(
env: *mut Env,
change_in_bytes: i64,
- adjusted_value: &mut i64,
+ adjusted_value: *mut i64,
) -> Result {
check_env!(env);
+ check_arg!(env, adjusted_value);
+
let env = unsafe { &mut *env };
let isolate = &mut *env.isolate_ptr;
*adjusted_value =
isolate.adjust_amount_of_external_allocated_memory(change_in_bytes);
+
+ napi_clear_last_error(env);
Ok(())
}
diff --git a/test_napi/mem_test.js b/test_napi/mem_test.js
new file mode 100644
index 000000000..bdbd395d3
--- /dev/null
+++ b/test_napi/mem_test.js
@@ -0,0 +1,11 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+
+import { assert, loadTestLibrary } from "./common.js";
+
+const mem = loadTestLibrary();
+
+Deno.test("napi adjust external memory", function () {
+ const adjusted = mem.adjust_external_memory();
+ assert(typeof adjusted === "number");
+ assert(adjusted > 0);
+});
diff --git a/test_napi/src/lib.rs b/test_napi/src/lib.rs
index 78a8248dc..71258ee7f 100644
--- a/test_napi/src/lib.rs
+++ b/test_napi/src/lib.rs
@@ -13,6 +13,7 @@ pub mod callback;
pub mod coerce;
pub mod date;
pub mod error;
+pub mod mem;
pub mod numbers;
pub mod object_wrap;
pub mod primitives;
@@ -152,6 +153,8 @@ unsafe extern "C" fn napi_register_module_v1(
r#async::init(env, exports);
date::init(env, exports);
tsfn::init(env, exports);
+ mem::init(env, exports);
+
init_cleanup_hook(env, exports);
exports
diff --git a/test_napi/src/mem.rs b/test_napi/src/mem.rs
new file mode 100644
index 000000000..dde4418cb
--- /dev/null
+++ b/test_napi/src/mem.rs
@@ -0,0 +1,34 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+
+use crate::assert_napi_ok;
+use crate::napi_new_property;
+use napi_sys::*;
+use std::ptr;
+
+extern "C" fn adjust_external_memory(
+ env: napi_env,
+ _: napi_callback_info,
+) -> napi_value {
+ let mut adjusted_value = 0;
+
+ assert_napi_ok!(napi_adjust_external_memory(env, 1024, &mut adjusted_value));
+
+ let mut result = ptr::null_mut();
+ assert_napi_ok!(napi_create_int64(env, adjusted_value, &mut result));
+ result
+}
+
+pub fn init(env: napi_env, exports: napi_value) {
+ let properties = &[napi_new_property!(
+ env,
+ "adjust_external_memory",
+ adjust_external_memory
+ )];
+
+ assert_napi_ok!(napi_define_properties(
+ env,
+ exports,
+ properties.len(),
+ properties.as_ptr()
+ ));
+}