| Index: chrome/nacl/nacl_helper_linux.cc
|
| diff --git a/chrome/nacl/nacl_helper_linux.cc b/chrome/nacl/nacl_helper_linux.cc
|
| index 53c2fb30118b87cebbbdedc64f3b1995da8ebbd2..a066db794aa43f3a5a314b5f7a1f41b59442df03 100644
|
| --- a/chrome/nacl/nacl_helper_linux.cc
|
| +++ b/chrome/nacl/nacl_helper_linux.cc
|
| @@ -40,7 +40,8 @@ namespace {
|
| // if (!child) {
|
| // Note: this code doesn't attempt to support SELINUX or the SECCOMP sandbox.
|
| void BecomeNaClLoader(const std::vector<int>& child_fds,
|
| - size_t prereserved_sandbox_size) {
|
| + size_t prereserved_sandbox_size,
|
| + int number_of_cores) {
|
| VLOG(1) << "NaCl loader: setting up IPC descriptor";
|
| // don't need zygote FD any more
|
| if (HANDLE_EINTR(close(kNaClZygoteDescriptor)) != 0)
|
| @@ -51,6 +52,7 @@ void BecomeNaClLoader(const std::vector<int>& child_fds,
|
| MessageLoopForIO main_message_loop;
|
| NaClListener listener;
|
| listener.set_prereserved_sandbox_size(prereserved_sandbox_size);
|
| + listener.set_number_of_cores(number_of_cores);
|
| listener.Listen();
|
| _exit(0);
|
| }
|
| @@ -58,7 +60,8 @@ void BecomeNaClLoader(const std::vector<int>& child_fds,
|
| // Some of this code was lifted from
|
| // content/browser/zygote_main_linux.cc:ForkWithRealPid()
|
| void HandleForkRequest(const std::vector<int>& child_fds,
|
| - size_t prereserved_sandbox_size) {
|
| + size_t prereserved_sandbox_size,
|
| + int number_of_cores) {
|
| VLOG(1) << "nacl_helper: forking";
|
| pid_t childpid = fork();
|
| if (childpid < 0) {
|
| @@ -96,7 +99,7 @@ void HandleForkRequest(const std::vector<int>& child_fds,
|
| if (HANDLE_EINTR(close(child_fds[kNaClParentFDIndex])) != 0)
|
| LOG(ERROR) << "close(child_fds[kNaClParentFDIndex]) failed";
|
| if (validack) {
|
| - BecomeNaClLoader(child_fds, prereserved_sandbox_size);
|
| + BecomeNaClLoader(child_fds, prereserved_sandbox_size, number_of_cores);
|
| } else {
|
| LOG(ERROR) << "Failed to synch with zygote";
|
| }
|
| @@ -236,6 +239,7 @@ int main(int argc, char* argv[]) {
|
| #endif
|
| std::vector<int> empty; // for SendMsg() calls
|
| size_t prereserved_sandbox_size = CheckReservedAtZero();
|
| + int number_of_cores = sysconf(_SC_NPROCESSORS_ONLN);
|
|
|
| CheckRDebug(argv[0]);
|
|
|
| @@ -272,7 +276,7 @@ int main(int argc, char* argv[]) {
|
| } else if (msglen == sizeof(kNaClForkRequest) - 1 &&
|
| memcmp(buf, kNaClForkRequest, msglen) == 0) {
|
| if (kNaClParentFDIndex + 1 == fds.size()) {
|
| - HandleForkRequest(fds, prereserved_sandbox_size);
|
| + HandleForkRequest(fds, prereserved_sandbox_size, number_of_cores);
|
| continue; // fork succeeded. Note: child does not return
|
| } else {
|
| LOG(ERROR) << "nacl_helper: unexpected number of fds, got "
|
|
|