diff options
author | jcivelli@chromium.org <jcivelli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-25 00:20:08 +0000 |
---|---|---|
committer | jcivelli@chromium.org <jcivelli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-25 00:20:08 +0000 |
commit | c7abd4296309d21002aebb32edf8333ada4f74db (patch) | |
tree | c066a73babc0d66174b9c4828c8726086053bbc3 /content/app | |
parent | 7c6e9a625f39fe59ff6d846dac353688aa669fee (diff) | |
download | chromium_src-c7abd4296309d21002aebb32edf8333ada4f74db.zip chromium_src-c7abd4296309d21002aebb32edf8333ada4f74db.tar.gz chromium_src-c7abd4296309d21002aebb32edf8333ada4f74db.tar.bz2 |
Close leaking FDs.
When starting a SandboxedProcess the resource file descriptors were leaked in
the browser process, eventually causing crashers.
BUG=None
TEST=When using the Android content shell for a long time, it should not crash.
Review URL: https://chromiumcodereview.appspot.com/10949027
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@158456 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/app')
-rw-r--r-- | content/app/android/sandboxed_process_service.cc | 40 |
1 files changed, 17 insertions, 23 deletions
diff --git a/content/app/android/sandboxed_process_service.cc b/content/app/android/sandboxed_process_service.cc index 291748f..eb3c299 100644 --- a/content/app/android/sandboxed_process_service.cc +++ b/content/app/android/sandboxed_process_service.cc @@ -50,22 +50,18 @@ class SurfaceTexturePeerSandboxedImpl : public content::SurfaceTexturePeer { // Chrome actually uses the renderer code path for all of its sandboxed // processes such as renderers, plugins, etc. -void InternalInitSandboxedProcess(int ipc_fd, - const std::vector<int>& extra_file_ids, - const std::vector<int>& extra_file_fds, +void InternalInitSandboxedProcess(const std::vector<int>& file_ids, + const std::vector<int>& file_fds, JNIEnv* env, jclass clazz, jobject context, jobject service) { - // Set up the IPC file descriptor mapping. - base::GlobalDescriptors::GetInstance()->Set(kPrimaryIPCChannel, ipc_fd); - // Register the extra file descriptors. - // This usually include the crash dump signals and resource related files. - DCHECK(extra_file_fds.size() == extra_file_ids.size()); - for (size_t i = 0; i < extra_file_ids.size(); ++i) { - base::GlobalDescriptors::GetInstance()->Set(extra_file_ids[i], - extra_file_fds[i]); - } + // Register the file descriptors. + // This includes the IPC channel, the crash dump signals and resource related + // files. + DCHECK(file_fds.size() == file_ids.size()); + for (size_t i = 0; i < file_ids.size(); ++i) + base::GlobalDescriptors::GetInstance()->Set(file_ids[i], file_fds[i]); content::SurfaceTexturePeer::InitInstance( new SurfaceTexturePeerSandboxedImpl(service)); @@ -80,17 +76,15 @@ void InitSandboxedProcess(JNIEnv* env, jclass clazz, jobject context, jobject service, - jint ipc_fd, - jintArray j_extra_file_ids, - jintArray j_extra_file_fds) { - std::vector<int> extra_file_ids; - std::vector<int> extra_file_fds; - JavaIntArrayToIntVector(env, j_extra_file_ids, &extra_file_ids); - JavaIntArrayToIntVector(env, j_extra_file_fds, &extra_file_fds); - - InternalInitSandboxedProcess(static_cast<int>(ipc_fd), - extra_file_ids, extra_file_fds, - env, clazz, context, service); + jintArray j_file_ids, + jintArray j_file_fds) { + std::vector<int> file_ids; + std::vector<int> file_fds; + JavaIntArrayToIntVector(env, j_file_ids, &file_ids); + JavaIntArrayToIntVector(env, j_file_fds, &file_fds); + + InternalInitSandboxedProcess( + file_ids, file_fds, env, clazz, context, service); } void ExitSandboxedProcess(JNIEnv* env, jclass clazz) { |