Run destruction callbacks before message loop gets destroyed

This commit is contained in:
Cheng Zhao 2015-09-09 19:27:08 +08:00
parent e5496d9ac0
commit 9d51da505e
2 changed files with 11 additions and 2 deletions

View file

@ -39,8 +39,6 @@ AtomBrowserMainParts::AtomBrowserMainParts()
} }
AtomBrowserMainParts::~AtomBrowserMainParts() { AtomBrowserMainParts::~AtomBrowserMainParts() {
for (const auto& callback : destruction_callbacks_)
callback.Run();
} }
// static // static
@ -118,4 +116,14 @@ void AtomBrowserMainParts::PreMainMessageLoopRun() {
#endif #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 } // namespace atom

View file

@ -41,6 +41,7 @@ class AtomBrowserMainParts : public brightray::BrowserMainParts {
// content::BrowserMainParts: // content::BrowserMainParts:
void PostEarlyInitialization() override; void PostEarlyInitialization() override;
void PreMainMessageLoopRun() override; void PreMainMessageLoopRun() override;
void PostMainMessageLoopRun() override;
#if defined(OS_MACOSX) #if defined(OS_MACOSX)
void PreMainMessageLoopStart() override; void PreMainMessageLoopStart() override;
void PostDestroyThreads() override; void PostDestroyThreads() override;