From 9d51da505e24c97332159fe077bf35cd3642fc0b Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 9 Sep 2015 19:27:08 +0800 Subject: [PATCH] Run destruction callbacks before message loop gets destroyed --- atom/browser/atom_browser_main_parts.cc | 12 ++++++++++-- atom/browser/atom_browser_main_parts.h | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/atom/browser/atom_browser_main_parts.cc b/atom/browser/atom_browser_main_parts.cc index 61b98dfc40..a1a1192b27 100644 --- a/atom/browser/atom_browser_main_parts.cc +++ b/atom/browser/atom_browser_main_parts.cc @@ -39,8 +39,6 @@ AtomBrowserMainParts::AtomBrowserMainParts() } AtomBrowserMainParts::~AtomBrowserMainParts() { - for (const auto& callback : destruction_callbacks_) - callback.Run(); } // static @@ -118,4 +116,14 @@ void AtomBrowserMainParts::PreMainMessageLoopRun() { #endif } +void AtomBrowserMainParts::PostMainMessageLoopRun() { + brightray::BrowserMainParts::PostMainMessageLoopRun(); + + // Make sure destruction callbacks are called before message loop is + // destroyed, otherwise some objects that need to be deleted on IO thread + // won't be freed. + for (const auto& callback : destruction_callbacks_) + callback.Run(); +} + } // namespace atom diff --git a/atom/browser/atom_browser_main_parts.h b/atom/browser/atom_browser_main_parts.h index 59ff7c977c..bcebc86f16 100644 --- a/atom/browser/atom_browser_main_parts.h +++ b/atom/browser/atom_browser_main_parts.h @@ -41,6 +41,7 @@ class AtomBrowserMainParts : public brightray::BrowserMainParts { // content::BrowserMainParts: void PostEarlyInitialization() override; void PreMainMessageLoopRun() override; + void PostMainMessageLoopRun() override; #if defined(OS_MACOSX) void PreMainMessageLoopStart() override; void PostDestroyThreads() override;