diff options
author | mcgrathr@chromium.org <mcgrathr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-15 19:06:52 +0000 |
---|---|---|
committer | mcgrathr@chromium.org <mcgrathr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-15 19:06:52 +0000 |
commit | 773ebb9bc2a68879fc6c7f38e18573687151abdc (patch) | |
tree | bba65743f6fd1dbe64a78d3e8c11bd1627f3e890 /chrome/nacl | |
parent | 19682a954be12bc426c41136845bf57cbb6c3c5d (diff) | |
download | chromium_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.cc | 30 | ||||
-rw-r--r-- | chrome/nacl/nacl_listener.h | 3 |
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_; |