Skip to content

n-api: keep napi_env alive while it has finalizers #31140

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Closed
wants to merge 3 commits into from

Conversation

addaleax
Copy link
Member

@addaleax addaleax commented Dec 30, 2019

Manage the napi_env refcount from Finalizer instances, as the
finalizer may refer to the napi_env until it is deleted.

Fixes: #31134
Fixes: node-ffi-napi/node-ffi-napi#48

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • tests and/or benchmarks are included
  • commit message follows commit guidelines

Manage the napi_env refcount from Finalizer instances, as the
finalizer may refer to the napi_env until it is deleted.

Fixes: nodejs#31134
Fixes: node-ffi-napi/node-ffi-napi#48
@addaleax addaleax added node-api Issues and PRs related to the Node-API. lts-watch-v10.x labels Dec 30, 2019
@addaleax addaleax requested a review from gengjiawen December 30, 2019 20:31
@nodejs-github-bot nodejs-github-bot added the c++ Issues and PRs that require attention from people who are familiar with C++. label Dec 30, 2019
@nodejs-github-bot
Copy link
Collaborator

@addaleax addaleax added the wip Issues and PRs that are still a work in progress. label Dec 30, 2019
Trott
Trott previously approved these changes Dec 30, 2019
@Trott Trott dismissed their stale review December 30, 2019 20:55

test failures

@addaleax addaleax removed the wip Issues and PRs that are still a work in progress. label Dec 30, 2019
@nodejs-github-bot
Copy link
Collaborator

@legendecas
Copy link
Member

Just out of curiosity, why wrapped objects by napi_wrap do not surface this issue? I tested against objects been wrapped which has been attached to process object too, it didn't crash on exit.

@addaleax
Copy link
Member Author

addaleax commented Jan 2, 2020

@legendecas Because those finalizers are called during the destruction of napi_env, so the napi_env is still accessible at that point, as I understand it.

@nodejs-github-bot
Copy link
Collaborator

@legendecas
Copy link
Member

@addaleax Because those finalizers are called during the destruction of napi_env, so the napi_env is still accessible at that point, as I understand it.

Yeah, there are two lists tracking these references. Wondering if it is possible to track those array buffers in the list too?

@addaleax
Copy link
Member Author

addaleax commented Jan 3, 2020

@addaleax Because those finalizers are called during the destruction of napi_env, so the napi_env is still accessible at that point, as I understand it.

Yeah, there are two lists tracking these references. Wondering if it is possible to track those array buffers in the list too?

Well … In an ideal world, I think it would have been cleaner and more consistent for N-API not to just blindly wrap the Node.js C++ Buffer API, and instead only provide the option to create a Buffer using napi_create_typedarray(env, napi_buffer, ...) analogously to napi_create_typedarray(env, napi_uint8_array, ...).

However, the way things currently work is that the N-API methods for dealing with buffers correspond to the C++ Buffer API. That has its own finalization mechanism.

The only way “out” of this that I could see is to try and implement the N-API buffer methods in terms of the regular N-API typed array methods – feel free to do that if you like, but it seems like that’s out of scope for this PR.

@nodejs-github-bot
Copy link
Collaborator

@nodejs-github-bot
Copy link
Collaborator

nodejs-github-bot commented Jan 4, 2020

@addaleax
Copy link
Member Author

addaleax commented Jan 4, 2020

Landed in 493faf6

@addaleax addaleax closed this Jan 4, 2020
@addaleax addaleax deleted the fix-napi-finalizer-env-ref branch January 4, 2020 06:38
addaleax added a commit that referenced this pull request Jan 4, 2020
Manage the napi_env refcount from Finalizer instances, as the
finalizer may refer to the napi_env until it is deleted.

Fixes: #31134
Fixes: node-ffi-napi/node-ffi-napi#48
PR-URL: #31140
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
targos pushed a commit that referenced this pull request Jan 6, 2020
Manage the napi_env refcount from Finalizer instances, as the
finalizer may refer to the napi_env until it is deleted.

Fixes: #31134
Fixes: node-ffi-napi/node-ffi-napi#48
PR-URL: #31140
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
@BridgeAR BridgeAR mentioned this pull request Jan 7, 2020
targos pushed a commit that referenced this pull request Jan 14, 2020
Manage the napi_env refcount from Finalizer instances, as the
finalizer may refer to the napi_env until it is deleted.

Fixes: #31134
Fixes: node-ffi-napi/node-ffi-napi#48
PR-URL: #31140
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
BethGriggs pushed a commit that referenced this pull request Feb 6, 2020
Manage the napi_env refcount from Finalizer instances, as the
finalizer may refer to the napi_env until it is deleted.

Fixes: #31134
Fixes: node-ffi-napi/node-ffi-napi#48
PR-URL: #31140
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
@MylesBorins MylesBorins mentioned this pull request Feb 8, 2020
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
c++ Issues and PRs that require attention from people who are familiar with C++. node-api Issues and PRs related to the Node-API.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Buffer api error since 13.3.0 Segmentation fault in node 13
7 participants