Sisyphus repository
Last update: 1 october 2023 | SRPMs: 18631 | Visits: 37766363
en ru br
ALT Linux repos
S:5.110.0-alt1

Group :: System/Libraries
RPM: kf5-kcoreaddons

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs and FR  Repocop 

Patch: alt-kreslimit-integration.patch
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);
 }
 
 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin