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

Side by Side Diff: chrome/browser/browser_main.cc

Issue 93147: POSIX: don't spawn zombies. (Closed)
Patch Set: ... Created 11 years, 7 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
« no previous file with comments | « base/process_util_win.cc ('k') | chrome/browser/renderer_host/browser_render_process_host.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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/field_trial.h" 10 #include "base/field_trial.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 #include "grit/chromium_strings.h" 49 #include "grit/chromium_strings.h"
50 #include "grit/generated_resources.h" 50 #include "grit/generated_resources.h"
51 #include "grit/net_resources.h" 51 #include "grit/net_resources.h"
52 #include "net/base/net_module.h" 52 #include "net/base/net_module.h"
53 #include "net/http/http_network_session.h" 53 #include "net/http/http_network_session.h"
54 54
55 #if defined(OS_POSIX) 55 #if defined(OS_POSIX)
56 // TODO(port): get rid of this include. It's used just to provide declarations 56 // TODO(port): get rid of this include. It's used just to provide declarations
57 // and stub definitions for classes we encouter during the porting effort. 57 // and stub definitions for classes we encouter during the porting effort.
58 #include "chrome/common/temp_scaffolding_stubs.h" 58 #include "chrome/common/temp_scaffolding_stubs.h"
59 #include <signal.h>
59 #endif 60 #endif
60 61
61 // TODO(port): several win-only methods have been pulled out of this, but 62 // TODO(port): several win-only methods have been pulled out of this, but
62 // BrowserMain() as a whole needs to be broken apart so that it's usable by 63 // BrowserMain() as a whole needs to be broken apart so that it's usable by
63 // other platforms. For now, it's just a stub. This is a serious work in 64 // other platforms. For now, it's just a stub. This is a serious work in
64 // progress and should not be taken as an indication of a real refactoring. 65 // progress and should not be taken as an indication of a real refactoring.
65 66
66 #if defined(OS_WIN) 67 #if defined(OS_WIN)
67 68
68 #include <windows.h> 69 #include <windows.h>
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 } 174 }
174 175
175 void RunUIMessageLoop(BrowserProcess* browser_process) { 176 void RunUIMessageLoop(BrowserProcess* browser_process) {
176 #if defined(OS_WIN) 177 #if defined(OS_WIN)
177 MessageLoopForUI::current()->Run(browser_process->accelerator_handler()); 178 MessageLoopForUI::current()->Run(browser_process->accelerator_handler());
178 #elif defined(OS_POSIX) 179 #elif defined(OS_POSIX)
179 MessageLoopForUI::current()->Run(); 180 MessageLoopForUI::current()->Run();
180 #endif 181 #endif
181 } 182 }
182 183
184 #if defined(OS_POSIX)
185 // See comment below, where sigaction is called.
186 void SIGCHLDHandler(int signal) {
187 }
188 #endif
189
183 } // namespace 190 } // namespace
184 191
185 // Main routine for running as the Browser process. 192 // Main routine for running as the Browser process.
186 int BrowserMain(const MainFunctionParams& parameters) { 193 int BrowserMain(const MainFunctionParams& parameters) {
187 const CommandLine& parsed_command_line = parameters.command_line_; 194 const CommandLine& parsed_command_line = parameters.command_line_;
188 base::ScopedNSAutoreleasePool* pool = parameters.autorelease_pool_; 195 base::ScopedNSAutoreleasePool* pool = parameters.autorelease_pool_;
189 196
190 // WARNING: If we get a WM_ENDSESSION objects created on the stack here 197 // WARNING: If we get a WM_ENDSESSION objects created on the stack here
191 // are NOT deleted. If you need something to run during WM_ENDSESSION add it 198 // are NOT deleted. If you need something to run during WM_ENDSESSION add it
192 // to browser_shutdown::Shutdown or BrowserProcess::EndSession. 199 // to browser_shutdown::Shutdown or BrowserProcess::EndSession.
193 200
194 // TODO(beng, brettw): someday, break this out into sub functions with well 201 // TODO(beng, brettw): someday, break this out into sub functions with well
195 // defined roles (e.g. pre/post-profile startup, etc). 202 // defined roles (e.g. pre/post-profile startup, etc).
196 203
197 #ifdef TRACK_ALL_TASK_OBJECTS 204 #ifdef TRACK_ALL_TASK_OBJECTS
198 // Start tracking the creation and deletion of Task instance. 205 // Start tracking the creation and deletion of Task instance.
199 // This construction MUST be done before main_message_loop, so that it is 206 // This construction MUST be done before main_message_loop, so that it is
200 // destroyed after the main_message_loop. 207 // destroyed after the main_message_loop.
201 tracked_objects::AutoTracking tracking_objects; 208 tracked_objects::AutoTracking tracking_objects;
202 #endif 209 #endif
203 210
211 #if defined(OS_POSIX)
212 // We need to accept SIGCHLD, even though our handler is a no-op because
213 // otherwise we cannot wait on children. (According to POSIX 2001.)
214 struct sigaction action = {0};
215 action.sa_handler = SIGCHLDHandler;
216 CHECK(sigaction(SIGCHLD, &action, NULL) == 0);
217 #endif
218
204 // Do platform-specific things (such as finishing initializing Cocoa) 219 // Do platform-specific things (such as finishing initializing Cocoa)
205 // prior to instantiating the message loop. This could be turned into a 220 // prior to instantiating the message loop. This could be turned into a
206 // broadcast notification. 221 // broadcast notification.
207 Platform::WillInitializeMainMessageLoop(parsed_command_line); 222 Platform::WillInitializeMainMessageLoop(parsed_command_line);
208 223
209 MessageLoop main_message_loop(MessageLoop::TYPE_UI); 224 MessageLoop main_message_loop(MessageLoop::TYPE_UI);
210 225
211 // Initialize the SystemMonitor 226 // Initialize the SystemMonitor
212 base::SystemMonitor::Start(); 227 base::SystemMonitor::Start();
213 228
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 if (metrics) 629 if (metrics)
615 metrics->Stop(); 630 metrics->Stop();
616 631
617 // browser_shutdown takes care of deleting browser_process, so we need to 632 // browser_shutdown takes care of deleting browser_process, so we need to
618 // release it. 633 // release it.
619 browser_process.release(); 634 browser_process.release();
620 browser_shutdown::Shutdown(); 635 browser_shutdown::Shutdown();
621 636
622 return result_code; 637 return result_code;
623 } 638 }
OLDNEW
« no previous file with comments | « base/process_util_win.cc ('k') | chrome/browser/renderer_host/browser_render_process_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698