diff options
author | Andrew Christian <andrew.christian@nokia.com> | 2012-02-02 09:33:38 -0500 |
---|---|---|
committer | Chris Craig <ext-chris.craig@nokia.com> | 2012-02-02 22:54:36 +0100 |
commit | c103fef8e03c91679778d731d70b058674c6c737 (patch) | |
tree | 89e27f30986824dafe8132d7afc9373c39533d73 /src/core/unixprocessbackend.cpp | |
parent | 3621dfe4098bb550a91517e641deecaeb08c780f (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.cpp | 19 |
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. |