Index: content/browser/zygote_host_linux.cc |
diff --git a/content/browser/zygote_host_linux.cc b/content/browser/zygote_host_linux.cc |
index 42ee6da5c0f270fb353e2f78e46ecb0c1ef22213..dc2fc4e6c76ee056d17ba0594cf421c0ded664b6 100644 |
--- a/content/browser/zygote_host_linux.cc |
+++ b/content/browser/zygote_host_linux.cc |
@@ -272,28 +272,35 @@ pid_t ZygoteHost::ForkRequest( |
return base::kNullProcessHandle; |
} |
- const int kRendererScore = 5; |
- AdjustRendererOOMScore(pid, kRendererScore); |
+ // This is just a starting score for a renderer or extension (the |
+ // only types of processes that will be started this way). It will |
+ // get adjusted as time goes on. (This is the same value as |
+ // chrome::kLowestRendererOomScore in chrome/chrome_constants.h, but |
+ // that's not something we can include here.) |
+ const int kLowestRendererOomScore = 300; |
+ AdjustRendererOOMScore(pid, kLowestRendererOomScore); |
return pid; |
} |
void ZygoteHost::AdjustRendererOOMScore(base::ProcessHandle pid, int score) { |
- // 1) You can't change the oom_adj of a non-dumpable process (EPERM) unless |
- // you're root. Because of this, we can't set the oom_adj from the browser |
- // process. |
+ // 1) You can't change the oom_score_adj of a non-dumpable process |
+ // (EPERM) unless you're root. Because of this, we can't set the |
+ // oom_adj from the browser process. |
// |
- // 2) We can't set the oom_adj before entering the sandbox because the |
- // zygote is in the sandbox and the zygote is as critical as the browser |
- // process. Its oom_adj value shouldn't be changed. |
+ // 2) We can't set the oom_score_adj before entering the sandbox |
+ // because the zygote is in the sandbox and the zygote is as |
+ // critical as the browser process. Its oom_adj value shouldn't |
+ // be changed. |
// |
- // 3) A non-dumpable process can't even change its own oom_adj because it's |
- // root owned 0644. The sandboxed processes don't even have /proc, but one |
- // could imagine passing in a descriptor from outside. |
+ // 3) A non-dumpable process can't even change its own oom_score_adj |
+ // because it's root owned 0644. The sandboxed processes don't |
+ // even have /proc, but one could imagine passing in a descriptor |
+ // from outside. |
// |
// So, in the normal case, we use the SUID binary to change it for us. |
// However, Fedora (and other SELinux systems) don't like us touching other |
- // process's oom_adj values |
+ // process's oom_score_adj (or oom_adj) values |
// (https://bugzilla.redhat.com/show_bug.cgi?id=581256). |
// |
// The offical way to get the SELinux mode is selinux_getenforcemode, but I |
@@ -319,9 +326,13 @@ void ZygoteHost::AdjustRendererOOMScore(base::ProcessHandle pid, int score) { |
if (IsHeapProfilerRunning()) |
return; |
#endif |
+ // The command line switch used for supplying the OOM adjustment score |
+ // to the setuid sandbox. |
+ static const char kAdjustOOMScoreSwitch[] = "--adjust-oom-score"; |
+ |
std::vector<std::string> adj_oom_score_cmdline; |
adj_oom_score_cmdline.push_back(sandbox_binary_); |
- adj_oom_score_cmdline.push_back(base::kAdjustOOMScoreSwitch); |
+ adj_oom_score_cmdline.push_back(kAdjustOOMScoreSwitch); |
adj_oom_score_cmdline.push_back(base::Int64ToString(pid)); |
adj_oom_score_cmdline.push_back(base::IntToString(score)); |