summaryrefslogtreecommitdiffstats
path: root/chrome/nacl
diff options
context:
space:
mode:
authormcgrathr@chromium.org <mcgrathr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-15 19:06:52 +0000
committermcgrathr@chromium.org <mcgrathr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-15 19:06:52 +0000
commit773ebb9bc2a68879fc6c7f38e18573687151abdc (patch)
treebba65743f6fd1dbe64a78d3e8c11bd1627f3e890 /chrome/nacl
parent19682a954be12bc426c41136845bf57cbb6c3c5d (diff)
downloadchromium_src-773ebb9bc2a68879fc6c7f38e18573687151abdc.zip
chromium_src-773ebb9bc2a68879fc6c7f38e18573687151abdc.tar.gz
chromium_src-773ebb9bc2a68879fc6c7f38e18573687151abdc.tar.bz2
Open NaCl IRT file only once at startup
This changes the NaCl startup dance so that the IRT file is opened just once at browser startup. That file descriptor is kept around and passed repeatedly to each NaCl process launched. This ensures that when autoupdate replaces the file on disk with a new version, we continue to use the original file that corresponds to the old browser version that's still running. We also eliminate the cases for not having an IRT file, which is now a hard error (i.e. prevents NaCl launches). It's been a hard requirement for NaCl that the IRT be available since Chromium 14. BUG= http://code.google.com/p/nativeclient/issues/detail?id=1772 TEST= hand-tested in Chromium build on Linux, Mac, and Windows R=brettw@chromium.org Review URL: http://codereview.chromium.org/8397001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@110136 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/nacl')
-rw-r--r--chrome/nacl/nacl_listener.cc30
-rw-r--r--chrome/nacl/nacl_listener.h3
2 files changed, 15 insertions, 18 deletions
diff --git a/chrome/nacl/nacl_listener.cc b/chrome/nacl/nacl_listener.cc
index 678a87f..55f7e43 100644
--- a/chrome/nacl/nacl_listener.cc
+++ b/chrome/nacl/nacl_listener.cc
@@ -96,9 +96,7 @@ bool NaClListener::OnMessageReceived(const IPC::Message& msg) {
return handled;
}
-void NaClListener::OnStartSelLdr(
- std::vector<nacl::FileDescriptor> handles,
- bool have_irt_file) {
+void NaClListener::OnStartSelLdr(std::vector<nacl::FileDescriptor> handles) {
#if defined(OS_LINUX)
nacl::SetCreateMemoryObjectFunc(content::MakeSharedMemorySegmentViaIPC);
#elif defined(OS_MACOSX)
@@ -108,22 +106,22 @@ void NaClListener::OnStartSelLdr(
handles.pop_back();
#endif
- if (have_irt_file) {
- CHECK(handles.size() >= 1);
- NaClHandle irt_handle = nacl::ToNativeHandle(handles[handles.size() - 1]);
- handles.pop_back();
+ CHECK(handles.size() >= 1);
+ NaClHandle irt_handle = nacl::ToNativeHandle(handles[handles.size() - 1]);
+ handles.pop_back();
+
#if defined(OS_WIN)
- int irt_desc = _open_osfhandle(reinterpret_cast<intptr_t>(irt_handle),
- _O_RDWR | _O_BINARY);
- if (irt_desc < 0) {
- LOG(ERROR) << "_open_osfhandle() failed";
- return;
- }
+ int irt_desc = _open_osfhandle(reinterpret_cast<intptr_t>(irt_handle),
+ _O_RDONLY | _O_BINARY);
+ if (irt_desc < 0) {
+ LOG(ERROR) << "_open_osfhandle() failed";
+ return;
+ }
#else
- int irt_desc = irt_handle;
+ int irt_desc = irt_handle;
#endif
- NaClSetIrtFileDesc(irt_desc);
- }
+
+ NaClSetIrtFileDesc(irt_desc);
scoped_array<NaClHandle> array(new NaClHandle[handles.size()]);
for (size_t i = 0; i < handles.size(); i++) {
diff --git a/chrome/nacl/nacl_listener.h b/chrome/nacl/nacl_listener.h
index f0d275e..9a81b65 100644
--- a/chrome/nacl/nacl_listener.h
+++ b/chrome/nacl/nacl_listener.h
@@ -22,8 +22,7 @@ class NaClListener : public IPC::Channel::Listener {
void set_debug_enabled(bool value) {debug_enabled_ = value;}
private:
- void OnStartSelLdr(std::vector<nacl::FileDescriptor> handles,
- bool have_irt_file);
+ void OnStartSelLdr(std::vector<nacl::FileDescriptor> handles);
virtual bool OnMessageReceived(const IPC::Message& msg);
bool debug_enabled_;