@@ -478,11 +478,11 @@ may be called multiple times, from multiple contexts, and even concurrently from
478478multiple threads.
479479
480480Native addons may need to allocate global state which they use during
481- their entire life cycle such that the state must be unique to each instance of
482- the addon.
481+ their life cycle of an Node.js environment such that the state can be
482+ unique to each instance of the addon.
483483
484- To this end, Node-API provides a way to allocate data such that its life cycle
485- is tied to the life cycle of the Agent .
484+ To this end, Node-API provides a way to associate data such that its life cycle
485+ is tied to the life cycle of a Node.js environment .
486486
487487### `napi_set_instance_data`
488488
@@ -510,11 +510,11 @@ napi_status napi_set_instance_data(napi_env env,
510510
511511Returns `napi_ok` if the API succeeded.
512512
513- This API associates `data` with the currently running Agent. `data` can later
514- be retrieved using `napi_get_instance_data()`. Any existing data associated with
515- the currently running Agent which was set by means of a previous call to
516- `napi_set_instance_data()` will be overwritten. If a `finalize_cb` was provided
517- by the previous call, it will not be called.
513+ This API associates `data` with the currently running Node.js environment. `data`
514+ can later be retrieved using `napi_get_instance_data()`. Any existing data
515+ associated with the currently running Node.js environment which was set by means
516+ of a previous call to `napi_set_instance_data()` will be overwritten. If a
517+ `finalize_cb` was provided by the previous call, it will not be called.
518518
519519### `napi_get_instance_data`
520520
@@ -532,13 +532,13 @@ napi_status napi_get_instance_data(napi_env env,
532532
533533* `[in] env`: The environment that the Node-API call is invoked under.
534534* `[out] data`: The data item that was previously associated with the currently
535- running Agent by a call to `napi_set_instance_data()`.
535+ running Node.js environment by a call to `napi_set_instance_data()`.
536536
537537Returns `napi_ok` if the API succeeded.
538538
539539This API retrieves data that was previously associated with the currently
540- running Agent via `napi_set_instance_data()`. If no data is set, the call will
541- succeed and `data` will be set to `NULL`.
540+ running Node.js environment via `napi_set_instance_data()`. If no data is set,
541+ the call will succeed and `data` will be set to `NULL`.
542542
543543## Basic Node-API data types
544544
@@ -1799,11 +1799,11 @@ If still valid, this API returns the `napi_value` representing the
17991799JavaScript `Object` associated with the `napi_ref`. Otherwise, result
18001800will be `NULL`.
18011801
1802- ### Cleanup on exit of the current Node.js instance
1802+ ### Cleanup on exit of the current Node.js environment
18031803
18041804While a Node.js process typically releases all its resources when exiting,
18051805embedders of Node.js, or future Worker support, may require addons to register
1806- clean-up hooks that will be run once the current Node.js instance exits.
1806+ clean-up hooks that will be run once the current Node.js environment exits.
18071807
18081808Node-API provides functions for registering and un-registering such callbacks.
18091809When those callbacks are run, all resources that are being held by the addon
@@ -1929,6 +1929,22 @@ the hook from being executed, unless it has already started executing.
19291929This must be called on any `napi_async_cleanup_hook_handle` value obtained
19301930from [`napi_add_async_cleanup_hook`][].
19311931
1932+ ### Finalization on the exit of the Node.js environment
1933+
1934+ The Node.js environment may be torn down at an arbitrary time as soon as
1935+ possible with JavaScript execution disallowed, like on the request of
1936+ [`worker.terminate()`][]. When the environment is being torn down, the
1937+ registered `napi_finalize` callbacks of JavaScript objects, Thread-safe
1938+ functions and environment instance data are invoked immediately and
1939+ independently.
1940+
1941+ The invocation of `napi_finalize` callbacks are scheduled after the manually
1942+ registered cleanup hooks. In order to ensure a proper order of addon
1943+ finalization during environment shutdown to avoid use-after-free in the
1944+ `napi_finalize` callback, addons should register a cleanup hook with
1945+ `napi_add_env_cleanup_hook` and `napi_add_async_cleanup_hook` to manually
1946+ release the allocated resource in a proper order.
1947+
19321948## Module registration
19331949
19341950Node-API modules are registered in a manner similar to other modules
@@ -6433,6 +6449,7 @@ the add-on's file name during loading.
64336449[`process.release`]: process.md#processrelease
64346450[`uv_ref`]: https://docs.libuv.org/en/v1.x/handle.html#c.uv_ref
64356451[`uv_unref`]: https://docs.libuv.org/en/v1.x/handle.html#c.uv_unref
6452+ [`worker.terminate()`]: worker_threads.md#workerterminate
64366453[async_hooks `type`]: async_hooks.md#type
64376454[context-aware addons]: addons.md#context-aware-addons
64386455[docs]: https://github.com/nodejs/node-addon-api#api-documentation
0 commit comments