Group :: System/Libraries
RPM: kf5-kcoreaddons
Main Changelog Spec Patches Sources Download Gear Bugs and FR Repocop
Patch: alt-kreslimit-integration.patch
Download
Download
--- a/src/lib/io/kprocess.cpp
+++ b/src/lib/io/kprocess.cpp
@@ -20,6 +20,11 @@
#include <QFile>
+#include <QChar>
+#include <QSettings>
+#include <QRandomGenerator>
+#include <QFileInfo>
+
/////////////////////////////
// public member functions //
/////////////////////////////
@@ -243,6 +248,50 @@ void KProcess::start()
{
Q_D(KProcess);
+ QSettings settings(QStringLiteral("kreslimit"));
+ QStringList sysd_arguments;
+ QString progname = QFileInfo(QProcess::program()).baseName();
+ sysd_arguments << QStringLiteral("--user");
+ sysd_arguments << QStringLiteral("--slice=kreslimit-%1").arg(progname);
+ sysd_arguments << QStringLiteral("--unit=%1-%2").arg(progname).arg(QRandomGenerator::global()->generate());
+ sysd_arguments << QStringLiteral("-t");
+ sysd_arguments << QStringLiteral("-p");
+
+ unsigned int all_memsize = settings.value(QStringLiteral("all_memsize"), QVariant(0)).toUInt();
+ bool all_enable = settings.value(QStringLiteral("all_enable"), false).toBool();
+
+ if(all_enable) {
+ sysd_arguments << QStringLiteral("MemoryHigh=%1M").arg(all_memsize);
+ sysd_arguments << QProcess::program();
+ sysd_arguments << QProcess::arguments();
+ QProcess::start(QStringLiteral("/bin/systemd-run"), sysd_arguments);
+ return;
+ }
+
+ QString apps = settings.value(QStringLiteral("applist"), QString()).toString();
+ if(apps.isEmpty() || apps.isNull()) {
+ QProcess::start(d->openMode);
+ return;
+ }
+
+ QStringList applist = apps.split(QChar::fromLatin1(','));
+ for (auto constIterator = applist.constBegin(); constIterator != applist.constEnd(); ++constIterator) {
+ const QString &rec = *constIterator;
+ if(rec.startsWith(QProcess::program())) {
+ QStringList res = rec.split(QChar::fromLatin1(';'));
+ if(res.size() != 2) {
+ continue;
+ }
+ if(QProcess::program() == res[0]) {
+ sysd_arguments << QStringLiteral("MemoryHigh=%1M").arg(res[1].toUInt());
+ sysd_arguments << QProcess::program();
+ sysd_arguments << QProcess::arguments();
+ QProcess::start(QStringLiteral("/bin/systemd-run"), sysd_arguments);
+ return;
+ }
+ }
+ }
+
QProcess::start(d->openMode);
}