Skip to content

Commit 2a8bdd1

Browse files
jasnelllegendecas
authored andcommitted
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>
1 parent b4090b9 commit 2a8bdd1

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

src/js_native_api_v8.cc

+4
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,9 @@ class Reference : public RefBase {
379379

380380
protected:
381381
inline void Finalize(bool is_env_teardown = false) override {
382+
if (is_env_teardown) env_teardown_finalize_started_ = true;
383+
if (!is_env_teardown && env_teardown_finalize_started_) return;
384+
382385
// During env teardown, `~napi_env()` alone is responsible for finalizing.
383386
// Thus, we don't want any stray gc passes to trigger a second call to
384387
// `RefBase::Finalize()`. ClearWeak will ensure that even if the
@@ -467,6 +470,7 @@ class Reference : public RefBase {
467470
reference->Finalize();
468471
}
469472

473+
bool env_teardown_finalize_started_ = false;
470474
v8impl::Persistent<v8::Value> _persistent;
471475
SecondPassCallParameterRef* _secondPassParameter;
472476
};

0 commit comments

Comments
 (0)