diff options
author | dkegel@google.com <dkegel@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-08 23:29:11 +0000 |
---|---|---|
committer | dkegel@google.com <dkegel@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-08 23:29:11 +0000 |
commit | 78c6dd65953307dd0b550a16d92267a450c01309 (patch) | |
tree | 41fbb424f0285933d7fddd1d06d24b0b3a1a349b /base/zygote_manager.cc | |
parent | 37cd3a96b55aac1dad9016c05e78b5983972f985 (diff) | |
download | chromium_src-78c6dd65953307dd0b550a16d92267a450c01309.zip chromium_src-78c6dd65953307dd0b550a16d92267a450c01309.tar.gz chromium_src-78c6dd65953307dd0b550a16d92267a450c01309.tar.bz2 |
Enable zygote manager by default.
Fix broken recursion check.
Make OpenFile warning less scary, indicate it's normal at start of ui tests.
Make ui tests pass.
Avoid generating extra code on Mac.
BUG=11841
TEST=start the browser, then make chrome and all .pak files unreadable; or alternately, start an installed browser, and uninstall the browser while it's running. Then create a new tab and browse to two new sites.
Review URL: http://codereview.chromium.org/119289
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17909 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/zygote_manager.cc')
-rw-r--r-- | base/zygote_manager.cc | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/base/zygote_manager.cc b/base/zygote_manager.cc index 2310c2d..7f0043a 100644 --- a/base/zygote_manager.cc +++ b/base/zygote_manager.cc @@ -54,6 +54,12 @@ ZygoteManager::~ZygoteManager() { close(canary_fd_); canary_fd_ = -1; } +#ifndef OFFICIAL_BUILD + // Closing the canary kills the server, + // so after this it's ok for e.g. unit tests + // to start a new zygote server. + (void) unsetenv("ZYGOTE_MANAGER_STARTED"); +#endif } // Runs in client process @@ -61,13 +67,7 @@ ZygoteManager* ZygoteManager::Get() { static bool checked = false; static bool enabled = false; if (!checked) { - enabled = (getenv("ENABLE_ZYGOTE_MANAGER") != NULL); - // sanity check - make sure all the places that relaunch chrome - // have been zygotified. - if (enabled) - DCHECK(getenv("ZYGOTE_MANAGER_STARTED") == NULL) - << "fork/exec used instead of LongFork"; - (void) setenv("ZYGOTE_MANAGER_STARTED", "1", 1); + enabled = (getenv("DISABLE_ZYGOTE_MANAGER") == NULL); checked = true; } if (!enabled) @@ -594,7 +594,6 @@ bool ZygoteManager::ReadAndHandleMessage(std::vector<std::string>** newargv) { if (nactive == -1) { if (errno == EINTR) { - LOG(INFO) << "poll interrupted"; // Probably SIGCHLD. Return to main loop so it can reap. return true; } @@ -723,6 +722,12 @@ std::vector<std::string>* ZygoteManager::Start() { DCHECK(server_fd_ == -1); DCHECK(client_fd_ == -1); +#ifndef OFFICIAL_BUILD + // Disallow nested ZygoteManager servers + CHECK(getenv("ZYGOTE_MANAGER_STARTED") == NULL) << "already started?!"; + (void) setenv("ZYGOTE_MANAGER_STARTED", "1", 1); +#endif + int pipe_fds[2]; // Avoid using the reserved fd slots. @@ -761,11 +766,11 @@ std::vector<std::string>* ZygoteManager::Start() { // Fork a fork server. pid_t childpid = fork(); - if (childpid) { + if (!childpid) { for (int i=0; i < kReservedFds; i++) close(reserved_fds[i]); - // Original parent. Continues on with the main program + // Original child. Continues on with the main program // and becomes the first client. close(server_fd_); server_fd_ = -1; @@ -789,7 +794,7 @@ std::vector<std::string>* ZygoteManager::Start() { action.sa_handler = SIGCHLDHandler; CHECK(sigaction(SIGCHLD, &action, NULL) == 0); - // Original child. Acts as the server. + // Original process. Acts as the server. while (true) { std::vector<std::string>* newargv = NULL; if (!ReadAndHandleMessage(&newargv)) @@ -812,7 +817,6 @@ std::vector<std::string>* ZygoteManager::Start() { } } // Server cleanup after EOF or error reading from the socket. - // Chrome doesn't seem to get here in practice. Delete(FilePath(lockfile_), false); // TODO(dkegel): real error handling LOG(INFO) << "exiting. " << cached_fds_.size() << " cached fds."; @@ -821,7 +825,7 @@ std::vector<std::string>* ZygoteManager::Start() { LOG(INFO) << "Closing fd " << i->second << " filename " << i->first; close(i->second); } - exit(-1); + exit(0); } } } |