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

[v14.x] backport process.exit changes #38786

Closed
wants to merge 3 commits into from

Commits on May 23, 2021

  1. src: add check against non-weak BaseObjects at process exit

    When a process exits cleanly, i.e. because the event loop ends up
    without things to wait for, the Node.js objects that are left on
    the heap should be:
    
     1. weak, i.e. ready for garbage collection once no longer
        referenced, or
     2. detached, i.e. scheduled for destruction once no longer
        referenced, or
     3. an unrefed libuv handle, i.e. does not keep the event loop
        alive, or
     4. an inactive libuv handle (essentially the same here)
    
    There are a few exceptions to this rule, but generally,
    if there are C++-backed Node.js objects on the heap
    that do not fall into the above categories, we may be looking
    at a potential memory leak. Most likely, the cause is a missing
    `MakeWeak()` call on the corresponding object.
    
    In order to avoid this kind of problem, we check the list
    of BaseObjects for these criteria. In this commit, we only do so
    when explicitly instructed to or when in debug mode
    (where --verify-base-objects is always-on).
    
    In particular, this avoids the kinds of memory leak issues
    that were fixed in the PRs referenced below.
    
    Refs: nodejs#35488
    Refs: nodejs#35487
    Refs: nodejs#35481
    
    PR-URL: nodejs#35490
    Reviewed-By: James M Snell <jasnell@gmail.com>
    Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
    Reviewed-By: Rich Trott <rtrott@gmail.com>
    Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
    Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
    addaleax committed May 23, 2021
    Copy the full SHA
    733d983 View commit details
    Browse the repository at this point in the history
  2. src: fix compiler warning in env.cc

         ../src/env.cc:1227:22: error: lambda capture 'this' is not used [-Werror,-Wunused-lambda-capture]
          ForEachBaseObject([this](BaseObject* obj) {
                         ^~~~
    
    PR-URL: nodejs#35547
    Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
    Reviewed-By: Shelley Vohr <codebytere@gmail.com>
    Reviewed-By: Gus Caplan <me@gus.host>
    Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com>
    Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
    addaleax committed May 23, 2021
    Copy the full SHA
    09cfd99 View commit details
    Browse the repository at this point in the history
  3. src: add maybe versions of EmitExit and EmitBeforeExit

    This addresses a TODO comment, and removes invalid `.ToLocalChecked()`
    calls from our code base.
    
    PR-URL: nodejs#35486
    Reviewed-By: James M Snell <jasnell@gmail.com>
    addaleax committed May 23, 2021
    Copy the full SHA
    efcc595 View commit details
    Browse the repository at this point in the history