summaryrefslogtreecommitdiffstats
path: root/src/core/unixprocessbackend.cpp
diff options
context:
space:
mode:
authorAndrew Christian <andrew.christian@nokia.com>2012-02-02 09:33:38 -0500
committerChris Craig <ext-chris.craig@nokia.com>2012-02-02 22:54:36 +0100
commitc103fef8e03c91679778d731d70b058674c6c737 (patch)
tree89e27f30986824dafe8132d7afc9373c39533d73 /src/core/unixprocessbackend.cpp
parent3621dfe4098bb550a91517e641deecaeb08c780f (diff)
Updated oom adjustment. Fixed test cases to work on Linux and MacOS
Change-Id: I71d2544bc883fed759dab5e33d041bf66f1369da Reviewed-by: Chris Craig <ext-chris.craig@nokia.com>
Diffstat (limited to 'src/core/unixprocessbackend.cpp')
-rw-r--r--src/core/unixprocessbackend.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/core/unixprocessbackend.cpp b/src/core/unixprocessbackend.cpp
index de7a9c5..b019ebc 100644
--- a/src/core/unixprocessbackend.cpp
+++ b/src/core/unixprocessbackend.cpp
@@ -41,9 +41,11 @@
#include "unixprocessbackend.h"
#include "unixsandboxprocess.h"
+#include "procutils.h"
#include <sys/resource.h>
#include <errno.h>
#include <QDebug>
+#include <QFile>
QT_BEGIN_NAMESPACE_PROCESSMANAGER
@@ -119,8 +121,14 @@ void UnixProcessBackend::setDesiredPriority(qint32 priority)
qint32 UnixProcessBackend::actualOomAdjustment() const
{
+ // ### TODO: What if m_process doesn't have a valid PID yet?
+
if (m_process) {
- // ### TODO: Read correctly from /proc/<pid>/oom_score_adj
+ bool ok;
+ qint32 result = ProcUtils::oomAdjustment(m_process->pid(), &ok);
+ if (ok)
+ return result;
+ qWarning() << "Unable to read oom adjustment for" << m_process->pid();
}
return ProcessBackend::actualOomAdjustment();
}
@@ -133,7 +141,8 @@ void UnixProcessBackend::setDesiredOomAdjustment(qint32 oomAdjustment)
{
ProcessBackend::setDesiredOomAdjustment(oomAdjustment);
if (m_process) {
- // ### Write to /proc/<pid>/oom_score_adj
+ if (!ProcUtils::setOomAdjustment(m_process->pid(), oomAdjustment))
+ qWarning() << "Unable to set oom adjustment for" << m_process->pid();
}
}
@@ -240,7 +249,11 @@ void UnixProcessBackend::handleProcessStarted()
{
if (m_info.contains("priority") && setpriority(PRIO_PROCESS, m_process->pid(), m_info.priority()))
qWarning() << "Failed to set process priority at startup from " << actualPriority() <<
- "to" << m_info.priority() << " : errno = " << errno;
+ "to" << m_info.priority() << " : errno = " << errno;
+ if (m_info.contains("oomAdjustment") &&
+ !ProcUtils::setOomAdjustment(m_process->pid(), m_info.oomAdjustment()))
+ qWarning() << "Failed to set process oom score at startup from " << actualOomAdjustment() <<
+ "to" << m_info.oomAdjustment();
}
/*!
Override this in subclasses. Make sure you call the parent class with \a error.