From e46b0c8ddc73800f816ffec5c072deeaaa876e9e Mon Sep 17 00:00:00 2001 From: yangllu Date: Fri, 4 Apr 2025 01:12:12 +0800 Subject: [PATCH] fix: gin_helper::Promise in GPUInfoManager must be destroyed before destroying Node/V8 (#46434) * fix: gin_helper::Promise in GPUInfoManager must be destroyed before destroying Node/V8 * fix: use CleanedUpAtExit to control the lifetime of GPUInfoManager --- shell/browser/api/gpuinfo_manager.cc | 4 +++- shell/browser/api/gpuinfo_manager.h | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/shell/browser/api/gpuinfo_manager.cc b/shell/browser/api/gpuinfo_manager.cc index 4a2f4f30e415..b68d7e27e62a 100644 --- a/shell/browser/api/gpuinfo_manager.cc +++ b/shell/browser/api/gpuinfo_manager.cc @@ -17,7 +17,9 @@ namespace electron { GPUInfoManager* GPUInfoManager::GetInstance() { - return base::Singleton::get(); + // will be deleted by CleanedUpAtExit::DoCleanup + static GPUInfoManager* instance = new GPUInfoManager(); + return instance; } GPUInfoManager::GPUInfoManager() diff --git a/shell/browser/api/gpuinfo_manager.h b/shell/browser/api/gpuinfo_manager.h index 3ee39475101e..b2f5cae518ea 100644 --- a/shell/browser/api/gpuinfo_manager.h +++ b/shell/browser/api/gpuinfo_manager.h @@ -11,6 +11,7 @@ #include "content/browser/gpu/gpu_data_manager_impl.h" // nogncheck #include "content/public/browser/gpu_data_manager.h" #include "content/public/browser/gpu_data_manager_observer.h" +#include "shell/common/gin_helper/cleaned_up_at_exit.h" namespace gin_helper { template @@ -20,7 +21,8 @@ class Promise; namespace electron { // GPUInfoManager is a singleton used to manage and fetch GPUInfo -class GPUInfoManager : private content::GpuDataManagerObserver { +class GPUInfoManager : private content::GpuDataManagerObserver, + public gin_helper::CleanedUpAtExit { public: static GPUInfoManager* GetInstance();