-
Notifications
You must be signed in to change notification settings - Fork 465
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
doc: update examples for context sensitivity #1013
Conversation
constructor.SuppressDestruct(); | ||
Napi::FunctionReference *constructor = new Napi::FunctionReference(); | ||
*constructor = Napi::Persistent(func); | ||
env.SetInstanceData(constructor); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A finalizer is required for this FunctionReference pointer right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @legendecas ,
Good question... I was under the impression that the instance data would be delete
d, so there would be no need for a Finalizer.
- In the case of multiple calls to
Example::Init
, the previous instance data would be overwritten via most recent call toenv.SetInstanceData
. https://github.com/nodejs/node/blob/d615aeb7583b15bb5a8d1ec666ea29b8c7377455/src/js_native_api_v8.cc#L3201-L3205 does this delete the data? - The final data would be
delete
d on environment cleanup.
Is my understanding correct?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Eh, IIUC, it's node-addon-api's default finalizer deleted the data pointer: https://github.com/nodejs/node-addon-api/blob/main/napi.h#L208. Not quite intuitive tho... So no finalizer is required here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The Delete
you point out only deleting the RefBase
structure allocated in Node.js core, which would invoke the finalizer provided by node-addon-api. (Update: no, the lines don't invoke finalizers as they are replacing existing instance data)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Fixes: #1011 PR-URL: #1013 Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Chengzhong Wu <[email protected]>
Landed as 627dbf3 |
Fixes: nodejs#1011 PR-URL: nodejs#1013 Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Chengzhong Wu <[email protected]>
Fixes: nodejs#1011 PR-URL: nodejs#1013 Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Chengzhong Wu <[email protected]>
Fixes: nodejs/node-addon-api#1011 PR-URL: nodejs/node-addon-api#1013 Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Chengzhong Wu <[email protected]>
Fixes: nodejs/node-addon-api#1011 PR-URL: nodejs/node-addon-api#1013 Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Chengzhong Wu <[email protected]>
Fixes: nodejs/node-addon-api#1011 PR-URL: nodejs/node-addon-api#1013 Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Chengzhong Wu <[email protected]>
Fixes: nodejs/node-addon-api#1011 PR-URL: nodejs/node-addon-api#1013 Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Chengzhong Wu <[email protected]>
Closes: #1011