Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2020-10-03 23:45:08 +0300
committerAnna Henningsen <anna@addaleax.net>2020-10-07 11:54:34 +0300
commit40364b181d44ba90b6ce7cda4f9e3297581121c5 (patch)
tree274285afac266cdd10973c40cdfdaf1c79f36fdf /src/handle_wrap.h
parentbc0c094b74063b81a831396988ffed291cc80e77 (diff)
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: https://github.com/nodejs/node/pull/35488 Refs: https://github.com/nodejs/node/pull/35487 Refs: https://github.com/nodejs/node/pull/35481 PR-URL: https://github.com/nodejs/node/pull/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>
Diffstat (limited to 'src/handle_wrap.h')
-rw-r--r--src/handle_wrap.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/handle_wrap.h b/src/handle_wrap.h
index 47eef32940b..ff25db2d919 100644
--- a/src/handle_wrap.h
+++ b/src/handle_wrap.h
@@ -87,6 +87,7 @@ class HandleWrap : public AsyncWrap {
AsyncWrap::ProviderType provider);
virtual void OnClose() {}
void OnGCCollect() final;
+ bool IsNotIndicativeOfMemoryLeakAtExit() const override;
void MarkAsInitialized();
void MarkAsUninitialized();