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

Side by Side Diff: chrome/app/chrome_main.cc

Issue 6372008: Make sure the process is _really_ gone after a __debugbreak(). We've had a... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/debug/debugger_win.cc ('k') | chrome/plugin/plugin_main.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "app/app_paths.h" 5 #include "app/app_paths.h"
6 #include "app/app_switches.h" 6 #include "app/app_switches.h"
7 #include "app/resource_bundle.h" 7 #include "app/resource_bundle.h"
8 #include "base/at_exit.h" 8 #include "base/at_exit.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/debugger.h" 10 #include "base/debug/debugger.h"
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 128
129 CAppModule _Module; 129 CAppModule _Module;
130 130
131 #pragma optimize("", off) 131 #pragma optimize("", off)
132 // Handlers for invalid parameter and pure call. They generate a breakpoint to 132 // Handlers for invalid parameter and pure call. They generate a breakpoint to
133 // tell breakpad that it needs to dump the process. 133 // tell breakpad that it needs to dump the process.
134 void InvalidParameter(const wchar_t* expression, const wchar_t* function, 134 void InvalidParameter(const wchar_t* expression, const wchar_t* function,
135 const wchar_t* file, unsigned int line, 135 const wchar_t* file, unsigned int line,
136 uintptr_t reserved) { 136 uintptr_t reserved) {
137 __debugbreak(); 137 __debugbreak();
138 _exit(1);
138 } 139 }
139 140
140 void PureCall() { 141 void PureCall() {
141 __debugbreak(); 142 __debugbreak();
143 _exit(1);
142 } 144 }
143 145
144 #pragma warning(push) 146 #pragma warning(push)
145 // Disables warning 4748 which is: "/GS can not protect parameters and local 147 // Disables warning 4748 which is: "/GS can not protect parameters and local
146 // variables from local buffer overrun because optimizations are disabled in 148 // variables from local buffer overrun because optimizations are disabled in
147 // function." GetStats() will not overflow the passed-in buffer and this 149 // function." GetStats() will not overflow the passed-in buffer and this
148 // function never returns. 150 // function never returns.
149 #pragma warning(disable : 4748) 151 #pragma warning(disable : 4748)
150 void OnNoMemory() { 152 void OnNoMemory() {
151 #if defined(USE_TCMALLOC) 153 #if defined(USE_TCMALLOC)
152 // Try to get some information on the stack to make the crash easier to 154 // Try to get some information on the stack to make the crash easier to
153 // diagnose from a minidump, being very careful not to do anything that might 155 // diagnose from a minidump, being very careful not to do anything that might
154 // try to heap allocate. 156 // try to heap allocate.
155 char buf[32*1024]; 157 char buf[32*1024];
156 MallocExtension::instance()->GetStats(buf, sizeof(buf)); 158 MallocExtension::instance()->GetStats(buf, sizeof(buf));
157 #endif 159 #endif
158 // Kill the process. This is important for security, since WebKit doesn't 160 // Kill the process. This is important for security, since WebKit doesn't
159 // NULL-check many memory allocations. If a malloc fails, returns NULL, and 161 // NULL-check many memory allocations. If a malloc fails, returns NULL, and
160 // the buffer is then used, it provides a handy mapping of memory starting at 162 // the buffer is then used, it provides a handy mapping of memory starting at
161 // address 0 for an attacker to utilize. 163 // address 0 for an attacker to utilize.
162 __debugbreak(); 164 __debugbreak();
165 _exit(1);
163 } 166 }
164 #pragma warning(pop) 167 #pragma warning(pop)
165 168
166 // Handlers to silently dump the current process when there is an assert in 169 // Handlers to silently dump the current process when there is an assert in
167 // chrome. 170 // chrome.
168 void ChromeAssert(const std::string& str) { 171 void ChromeAssert(const std::string& str) {
169 // Get the breakpad pointer from chrome.exe 172 // Get the breakpad pointer from chrome.exe
170 typedef void (__cdecl *DumpProcessFunction)(); 173 typedef void (__cdecl *DumpProcessFunction)();
171 DumpProcessFunction DumpProcess = reinterpret_cast<DumpProcessFunction>( 174 DumpProcessFunction DumpProcess = reinterpret_cast<DumpProcessFunction>(
172 ::GetProcAddress(::GetModuleHandle(chrome::kBrowserProcessExecutableName), 175 ::GetProcAddress(::GetModuleHandle(chrome::kBrowserProcessExecutableName),
(...skipping 745 matching lines...) Expand 10 before | Expand all | Expand 10 after
918 921
919 int exit_code = RunNamedProcessTypeMain(process_type, main_params); 922 int exit_code = RunNamedProcessTypeMain(process_type, main_params);
920 923
921 if (SubprocessNeedsResourceBundle(process_type)) 924 if (SubprocessNeedsResourceBundle(process_type))
922 ResourceBundle::CleanupSharedInstance(); 925 ResourceBundle::CleanupSharedInstance();
923 926
924 LowLevelShutdown(); 927 LowLevelShutdown();
925 928
926 return exit_code; 929 return exit_code;
927 } 930 }
OLDNEW
« no previous file with comments | « base/debug/debugger_win.cc ('k') | chrome/plugin/plugin_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698