Chromium Code Reviews| Index: chrome/browser/browser_main_posix.cc |
| diff --git a/chrome/browser/browser_main_posix.cc b/chrome/browser/browser_main_posix.cc |
| index cd88cc7946bfc14f11329bdd8360e19196810374..6291a62e9202e88058b2ba143ff001905b24682f 100644 |
| --- a/chrome/browser/browser_main_posix.cc |
| +++ b/chrome/browser/browser_main_posix.cc |
| @@ -187,31 +187,6 @@ void SetFileDescriptorLimit(unsigned int max_descriptors) { |
| // BrowserMainPartsPosix ------------------------------------------------------- |
| void BrowserMainPartsPosix::PreEarlyInitialization() { |
| - // We need to accept SIGCHLD, even though our handler is a no-op because |
| - // otherwise we cannot wait on children. (According to POSIX 2001.) |
| - struct sigaction action; |
| - memset(&action, 0, sizeof(action)); |
| - action.sa_handler = SIGCHLDHandler; |
| - CHECK(sigaction(SIGCHLD, &action, NULL) == 0); |
| - |
| - // If adding to this list of signal handlers, note the new signal probably |
| - // needs to be reset in child processes. See |
| - // base/process_util_posix.cc:LaunchProcess. |
| - |
| - // We need to handle SIGTERM, because that is how many POSIX-based distros ask |
| - // processes to quit gracefully at shutdown time. |
| - memset(&action, 0, sizeof(action)); |
| - action.sa_handler = SIGTERMHandler; |
| - CHECK(sigaction(SIGTERM, &action, NULL) == 0); |
| - // Also handle SIGINT - when the user terminates the browser via Ctrl+C. If |
| - // the browser process is being debugged, GDB will catch the SIGINT first. |
| - action.sa_handler = SIGINTHandler; |
| - CHECK(sigaction(SIGINT, &action, NULL) == 0); |
| - // And SIGHUP, for when the terminal disappears. On shutdown, many Linux |
| - // distros send SIGHUP, SIGTERM, and then SIGKILL. |
| - action.sa_handler = SIGHUPHandler; |
| - CHECK(sigaction(SIGHUP, &action, NULL) == 0); |
| - |
| const std::string fd_limit_string = |
| parsed_command_line().GetSwitchValueASCII( |
| switches::kFileDescriptorLimit); |
| @@ -257,6 +232,33 @@ void BrowserMainPartsPosix::PostMainMessageLoopStart() { |
| LOG(DFATAL) << "Failed to create shutdown detector task."; |
| } |
| } |
| + // Setup signal handlers AFTER shutodwn pipe is setup because |
|
viettrungluu
2011/07/21 18:00:20
s/shutodwn/shutdown/
|
| + // it may be called right away after handler is set. |
| + |
| + // We need to accept SIGCHLD, even though our handler is a no-op because |
|
viettrungluu
2011/07/21 18:00:20
We can presumably set up the SIGCHLD handler earli
oshima
2011/07/22 01:36:30
You're right. I moved SIGCHLDHandler back to PreEa
|
| + // otherwise we cannot wait on children. (According to POSIX 2001.) |
| + struct sigaction action; |
| + memset(&action, 0, sizeof(action)); |
| + action.sa_handler = SIGCHLDHandler; |
| + CHECK(sigaction(SIGCHLD, &action, NULL) == 0); |
| + |
| + // If adding to this list of signal handlers, note the new signal probably |
| + // needs to be reset in child processes. See |
| + // base/process_util_posix.cc:LaunchProcess. |
| + |
| + // We need to handle SIGTERM, because that is how many POSIX-based distros ask |
| + // processes to quit gracefully at shutdown time. |
| + memset(&action, 0, sizeof(action)); |
| + action.sa_handler = SIGTERMHandler; |
| + CHECK(sigaction(SIGTERM, &action, NULL) == 0); |
| + // Also handle SIGINT - when the user terminates the browser via Ctrl+C. If |
| + // the browser process is being debugged, GDB will catch the SIGINT first. |
| + action.sa_handler = SIGINTHandler; |
| + CHECK(sigaction(SIGINT, &action, NULL) == 0); |
| + // And SIGHUP, for when the terminal disappears. On shutdown, many Linux |
| + // distros send SIGHUP, SIGTERM, and then SIGKILL. |
| + action.sa_handler = SIGHUPHandler; |
| + CHECK(sigaction(SIGHUP, &action, NULL) == 0); |
| #if defined(TOOLKIT_USES_GTK) && !defined(OS_CHROMEOS) |
| printing::PrintingContextCairo::SetCreatePrintDialogFunction( |