Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3231)

Unified Diff: chrome/browser/lifetime/application_lifetime.cc

Issue 349263004: Fix Windows logoff race. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Test that Profile settings are written through to disk on EndSession. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/lifetime/application_lifetime.cc
diff --git a/chrome/browser/lifetime/application_lifetime.cc b/chrome/browser/lifetime/application_lifetime.cc
index 7e377a83cf581c26467528f1d155d0af4b054b8c..21b9e3bda36e273f8b1bb21e662c098a55279e8c 100644
--- a/chrome/browser/lifetime/application_lifetime.cc
+++ b/chrome/browser/lifetime/application_lifetime.cc
@@ -12,6 +12,8 @@
#include "base/memory/scoped_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/prefs/pref_service.h"
+#include "base/process/kill.h"
+#include "base/process/process.h"
#include "build/build_config.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_process_platform_part.h"
@@ -276,6 +278,15 @@ void SessionEnding() {
// Write important data first.
g_browser_process->EndSession();
+#if defined(OS_WIN)
+ base::win::SetShouldCrashOnProcessDetach(false);
+
+ // On Windows 7 and later, the system will consider the process ripe for
+ // termination as soon as it hides or destroys its windows. Since any
+ // execution past that point will be non-deterministically cut short, we
+ // might as well put ourselves out of that misery deterministically.
+ base::KillProcess(base::Process::Current().handle(), 0, false);
+#else
CloseAllBrowsers();
// Send out notification. This is used during testing so that the test harness
@@ -285,11 +296,9 @@ void SessionEnding() {
content::NotificationService::AllSources(),
content::NotificationService::NoDetails());
-#if defined(OS_WIN)
- base::win::SetShouldCrashOnProcessDetach(false);
-#endif
// This will end by terminating the process.
content::ImmediateShutdownAndExitProcess();
+#endif // defined(OS_WIN)
}
void IncrementKeepAliveCount() {

Powered by Google App Engine
This is Rietveld 408576698