diff options
author | Divy Srivastava <dj.srivastava23@gmail.com> | 2023-01-23 05:30:01 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-23 19:00:01 +0530 |
commit | cd192313064bc2e9d65e3e734930cfaf15f4191b (patch) | |
tree | b8187cfe80025efa6e7e1c1960a6bf9349e2a31f | |
parent | c3e0b12c72673badece8ef5d789a942637d893ba (diff) |
fix(napi): improve napi_adjust_external_memory (#17501)
<!--
Before submitting a PR, please read http://deno.land/manual/contributing
1. Give the PR a descriptive title.
Examples of good title:
- fix(std/http): Fix race condition in server
- docs(console): Update docstrings
- feat(doc): Handle nested reexports
Examples of bad title:
- fix #7123
- update docs
- fix bugs
2. Ensure there is a related issue and it is referenced in the PR text.
3. Ensure there are tests that cover the changes.
4. Ensure `cargo test` passes.
5. Ensure `./tools/format.js` passes without changing files.
6. Ensure `./tools/lint.js` passes.
7. Open as a draft PR if your work is still in progress. The CI won't
run
all steps, but you can add '[ci]' to a commit message to force it to.
8. If you would like to run the benchmarks on the CI, add the 'ci-bench'
label.
-->
-rw-r--r-- | cli/napi/js_native_api.rs | 6 | ||||
-rw-r--r-- | test_napi/mem_test.js | 11 | ||||
-rw-r--r-- | test_napi/src/lib.rs | 3 | ||||
-rw-r--r-- | test_napi/src/mem.rs | 34 |
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() + )); +} |