Skip to content
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

[v12.x] Backport node-api finalization fixes #42512

Closed

Commits on Mar 29, 2022

  1. node-api: force env shutdown deferring behavior

    The finalizer normally never gets called while a reference is strong.
    However, during environment shutdown all finalizers must get called. In
    order to unify the deferring behavior with that of a regular
    finalization, we must force the reference to be weak when we call its
    finalizer during environment shutdown.
    
    Fixes: nodejs#37236
    Co-authored-by: Chengzhong Wu <legendecas@gmail.com>
    PR-URL: nodejs#37303
    Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
    Reviewed-By: Michael Dawson <midawson@redhat.com>
    Gabriel Schulhof and legendecas committed Mar 29, 2022
    Configuration menu
    Copy the full SHA
    dfefe12 View commit details
    Browse the repository at this point in the history
  2. node-api: stop ref gc during environment teardown

    A gc may happen during environment teardown. Thus, during finalization
    initiated by environment teardown we must remove the V8 finalizer
    before calling the Node-API finalizer.
    
    Fixes: nodejs#37236
    PR-URL: nodejs#37616
    Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
    Reviewed-By: Michael Dawson <midawson@redhat.com>
    gabrielschulhof authored and legendecas committed Mar 29, 2022
    Configuration menu
    Copy the full SHA
    7b6b7d3 View commit details
    Browse the repository at this point in the history
  3. node-api: fix crash in finalization

    Refs: nodejs/node-addon-api#906
    Refs: nodejs#37616
    
    Fix crash introduced by nodejs#37616
    
    Signed-off-by: Michael Dawson <mdawson@devrus.com>
    
    PR-URL: nodejs#37876
    Reviewed-By: Anna Henningsen <anna@addaleax.net>
    Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
    Reviewed-By: Rich Trott <rtrott@gmail.com>
    Reviewed-By: James M Snell <jasnell@gmail.com>
    mhdawson authored and legendecas committed Mar 29, 2022
    Configuration menu
    Copy the full SHA
    affb8b2 View commit details
    Browse the repository at this point in the history
  4. node-api: make reference weak parameter an indirect link to references

    As the cancellation of second pass callbacks are not reachable from the
    current v8 API, and the second pass callbacks are scheduled with
    NodePlatform's task runner, we have to ensure that the weak parameter
    holds indirect access to the v8impl::Reference object so that the object
    can be destroyed on addon env teardown before the whole node env is able
    to shutdown.
    
    PR-URL: nodejs#38000
    Reviewed-By: Michael Dawson <midawson@redhat.com>
    Reviewed-By: Gabriel Schulhof <gabriel.schulhof@intel.com>
    legendecas committed Mar 29, 2022
    Configuration menu
    Copy the full SHA
    b4090b9 View commit details
    Browse the repository at this point in the history
  5. src: fix finalization crash

    PR-URL: nodejs#38250
    Fixes: nodejs#38040
    Reviewed-By: Beth Griggs <bgriggs@redhat.com>
    Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
    jasnell authored and legendecas committed Mar 29, 2022
    Configuration menu
    Copy the full SHA
    2a8bdd1 View commit details
    Browse the repository at this point in the history
  6. node-api: fix shutdown crashes

    Refs: nodejs/node-addon-api#906
    
    Ensure that finalization is not defered during shutdown.
    The env for the addon is deleted immediately after
    iterating the list of finalizers to be run. Defering
    causes crashes as the finalization uses the already
    deleted env.
    
    Signed-off-by: Michael Dawson <mdawson@devrus.com>
    
    PR-URL: nodejs#38492
    Reviewed-By: Anna Henningsen <anna@addaleax.net>
    Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
    Reviewed-By: Gabriel Schulhof <gabrielschulhof@gmail.com>
    mhdawson authored and legendecas committed Mar 29, 2022
    Configuration menu
    Copy the full SHA
    3939bba View commit details
    Browse the repository at this point in the history
  7. node-api: avoid SecondPassCallback crash

    PR nodejs#38000 added
    indirection so that we could stop finalization in
    cases where it had been scheduled in a second
    pass callback but we were doing it in advance in
    environment teardown.
    
    Unforunately we missed that the code which tries
    to clear the second pass parameter checked if
    the pointer to the parameter (_secondPassParameter)
    was nullptr and that when the second pass callback
    was scheduled we set _secondPassParameter to nullptr
    in order to avoid it being deleted outside of the second
    pass callback. The net result was that we
    would not clear the _secondPassParameter contents
    and failed to avoid the Finalization in the second pass
    callback.
    
    This PR adds an additional boolean for deciding if
    the secondPassParameter should be deleted outside
    of the second pass callback instead of setting
    secondPassParameter to nullptr thus avoiding the
    conflict between the 2 ways it was being used.
    
    See the discussion starting at:
    nodejs#38273 (comment)
    for how this was discovered on OSX while trying to
    upgrade to a new V8 version.
    
    Signed-off-by: Michael Dawson <mdawson@devrus.com>
    
    PR-URL: nodejs#38899
    Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
    Reviewed-By: James M Snell <jasnell@gmail.com>
    mhdawson authored and legendecas committed Mar 29, 2022
    Configuration menu
    Copy the full SHA
    b9d99d7 View commit details
    Browse the repository at this point in the history
  8. node-api: cctest on v8impl::Reference

    PR-URL: nodejs#38970
    Reviewed-By: Michael Dawson <midawson@redhat.com>
    Reviewed-By: Gabriel Schulhof <gabrielschulhof@gmail.com>
    legendecas committed Mar 29, 2022
    Configuration menu
    Copy the full SHA
    0fb5c42 View commit details
    Browse the repository at this point in the history