diff options
author | bsy@google.com <bsy@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-19 14:46:28 +0000 |
---|---|---|
committer | bsy@google.com <bsy@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-19 14:46:28 +0000 |
commit | 4d82ea811913c9aac247082502b9ebf47fde3229 (patch) | |
tree | b3c293427615e5474848bab871d493e4f6002a98 /chrome/nacl/nacl_helper_linux.cc | |
parent | 38f428f10f6e3dca2ff875e663f614aa56fc099f (diff) | |
download | chromium_src-4d82ea811913c9aac247082502b9ebf47fde3229.zip chromium_src-4d82ea811913c9aac247082502b9ebf47fde3229.tar.gz chromium_src-4d82ea811913c9aac247082502b9ebf47fde3229.tar.bz2 |
Set up NaClChromeMainArgs number_of_cores member so apps can size threadpools appropriately
The outer sandbox on Linux and OSX was preventing
sysconf(_SC_NPROCESSORS_ONLN) from succeeding, so that NaCl
applications that need the number of threads were getting a
bogus value (-1 when using newlib, and 1 when using glibc).
TEST= run_sysconf_nprocessors_onln_test
BUG= 176522
Review URL: https://chromiumcodereview.appspot.com/14238013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@195190 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/nacl/nacl_helper_linux.cc')
-rw-r--r-- | chrome/nacl/nacl_helper_linux.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/chrome/nacl/nacl_helper_linux.cc b/chrome/nacl/nacl_helper_linux.cc index 53c2fb30..a066db7 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 " |