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

Unified Diff: components/nacl/loader/nacl_helper_linux.cc

Issue 240673002: Simplify ZygoteForkDelegate API further (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | components/nacl/zygote/nacl_fork_delegate_linux.h » ('j') | content/zygote/zygote_linux.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/nacl/loader/nacl_helper_linux.cc
diff --git a/components/nacl/loader/nacl_helper_linux.cc b/components/nacl/loader/nacl_helper_linux.cc
index e1a6a66abaddadf5df5dbfa8178fcf54347b6e1c..6288655ffeeefad6a2ad284dc3d15543a855b90d 100644
--- a/components/nacl/loader/nacl_helper_linux.cc
+++ b/components/nacl/loader/nacl_helper_linux.cc
@@ -27,6 +27,7 @@
#include "base/posix/global_descriptors.h"
#include "base/posix/unix_domain_socket_linux.h"
#include "base/process/kill.h"
+#include "base/process/process_handle.h"
#include "base/rand_util.h"
#include "components/nacl/common/nacl_switches.h"
#include "components/nacl/loader/nacl_listener.h"
@@ -111,27 +112,29 @@ void BecomeNaClLoader(const std::vector<int>& child_fds,
// Start the NaCl loader in a child created by the NaCl loader Zygote.
void ChildNaClLoaderInit(const std::vector<int>& child_fds,
const NaClLoaderSystemInfo& system_info,
- bool uses_nonsfi_mode) {
+ bool uses_nonsfi_mode,
+ const std::string& channel_id) {
const int parent_fd = child_fds[content::ZygoteForkDelegate::kParentFDIndex];
const int dummy_fd = child_fds[content::ZygoteForkDelegate::kDummyFDIndex];
+
bool validack = false;
- const size_t kMaxReadSize = 1024;
- char buffer[kMaxReadSize];
+ base::ProcessId real_pid;
// Wait until the parent process has discovered our PID. We
// should not fork any child processes (which the seccomp
// sandbox does) until then, because that can interfere with the
// parent's discovery of our PID.
- const ssize_t nread = HANDLE_EINTR(read(parent_fd, buffer, kMaxReadSize));
-
- if (nread < 0) {
- perror("read");
- LOG(ERROR) << "read returned " << nread;
- } else if (nread > 0) {
- VLOG(1) << "NaCl loader is synchronised with Chrome zygote";
+ const ssize_t nread =
+ HANDLE_EINTR(read(parent_fd, &real_pid, sizeof(real_pid)));
Mark Seaborn 2014/04/17 18:32:12 So you're sending the real PID to the NaCl process
jln (very slow on Chromium) 2014/04/17 18:40:06 We do use the real pid to reap processes no? The
jln (very slow on Chromium) 2014/04/17 18:42:33 (err, disregard, you're talking about ChildNaClLoa
+ if (static_cast<size_t>(nread) == sizeof(real_pid)) {
CommandLine::ForCurrentProcess()->AppendSwitchASCII(
- switches::kProcessChannelID, std::string(buffer, nread));
+ switches::kProcessChannelID, channel_id);
validack = true;
+ } else {
+ if (nread < 0)
+ perror("read");
+ LOG(ERROR) << "read returned " << nread;
}
+
if (IGNORE_EINTR(close(dummy_fd)) != 0)
LOG(ERROR) << "close(dummy_fd) failed";
if (IGNORE_EINTR(close(parent_fd)) != 0)
@@ -157,6 +160,12 @@ bool HandleForkRequest(const std::vector<int>& child_fds,
return false;
}
+ std::string channel_id;
+ if (!input_iter->ReadString(&channel_id)) {
+ LOG(ERROR) << "Could not read channel_id string";
+ return false;
+ }
+
if (content::ZygoteForkDelegate::kNumPassedFDs != child_fds.size()) {
LOG(ERROR) << "nacl_helper: unexpected number of fds, got "
<< child_fds.size();
@@ -170,7 +179,7 @@ bool HandleForkRequest(const std::vector<int>& child_fds,
}
if (child_pid == 0) {
- ChildNaClLoaderInit(child_fds, system_info, uses_nonsfi_mode);
+ ChildNaClLoaderInit(child_fds, system_info, uses_nonsfi_mode, channel_id);
NOTREACHED();
}
« no previous file with comments | « no previous file | components/nacl/zygote/nacl_fork_delegate_linux.h » ('j') | content/zygote/zygote_linux.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698