summaryrefslogtreecommitdiffstats
path: root/content/app
diff options
context:
space:
mode:
authorjcivelli@chromium.org <jcivelli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-25 00:20:08 +0000
committerjcivelli@chromium.org <jcivelli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-25 00:20:08 +0000
commitc7abd4296309d21002aebb32edf8333ada4f74db (patch)
treec066a73babc0d66174b9c4828c8726086053bbc3 /content/app
parent7c6e9a625f39fe59ff6d846dac353688aa669fee (diff)
downloadchromium_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.cc40
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) {