summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO5
-rw-r--r--PKGBUILD13
-rw-r--r--fix-deadlock.patch89
3 files changed, 102 insertions, 5 deletions
diff --git a/.SRCINFO b/.SRCINFO
index ae40e7d4d747..4725ed1e50a9 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = kdocker
pkgdesc = An application to help you dock any application into the system tray
pkgver = 5.3
- pkgrel = 1
+ pkgrel = 2
url = https://github.com/user-none/KDocker
arch = i686
arch = x86_64
@@ -11,7 +11,8 @@ pkgbase = kdocker
depends = libxpm
depends = libxmu
source = https://github.com/user-none/KDocker/archive/5.3.tar.gz
+ source = fix-deadlock.patch
sha256sums = c49eea33d46a626b2a59c8ddc923ce9a027f0b9bd2125f4f6c264e888997e663
+ sha256sums = 731edac829b4231ddf87f3ed6cd043df4c2026bec4dc26dd11c22ad79876bcbd
pkgname = kdocker
-
diff --git a/PKGBUILD b/PKGBUILD
index dad51483f2b2..f6b0d873de01 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,13 +1,20 @@
pkgname=kdocker
pkgver=5.3
-pkgrel=1
+pkgrel=2
pkgdesc="An application to help you dock any application into the system tray"
arch=('i686' 'x86_64')
url="https://github.com/user-none/KDocker"
license=('GPL2')
depends=('qt5-base' 'qt5-x11extras' 'libxpm' 'libxmu')
-source=(https://github.com/user-none/KDocker/archive/${pkgver}.tar.gz)
-sha256sums=('c49eea33d46a626b2a59c8ddc923ce9a027f0b9bd2125f4f6c264e888997e663')
+source=(https://github.com/user-none/KDocker/archive/${pkgver}.tar.gz
+ 'fix-deadlock.patch')
+sha256sums=('c49eea33d46a626b2a59c8ddc923ce9a027f0b9bd2125f4f6c264e888997e663'
+ '731edac829b4231ddf87f3ed6cd043df4c2026bec4dc26dd11c22ad79876bcbd')
+
+prepare() {
+ cd "$srcdir/KDocker-$pkgver"
+ patch --forward --strip=1 --input="${srcdir}/fix-deadlock.patch"
+}
build() {
cd "$srcdir/KDocker-$pkgver"
diff --git a/fix-deadlock.patch b/fix-deadlock.patch
new file mode 100644
index 000000000000..d3018f6ef609
--- /dev/null
+++ b/fix-deadlock.patch
@@ -0,0 +1,89 @@
+Only in KDocker: .git
+Only in KDocker: .gitattributes
+Only in KDocker: .gitignore
+diff --unified --recursive --text KDocker-5.3/src/application.cpp KDocker/src/application.cpp
+--- KDocker-5.3/src/application.cpp 2020-03-10 10:04:31.000000000 -0400
++++ KDocker/src/application.cpp 2022-04-04 17:06:38.897419076 -0400
+@@ -18,19 +18,40 @@
+ */
+
+ #include "application.h"
++#include <sys/socket.h>
++#include <unistd.h>
+
++int Application::m_closeSignalFd[2];
+
+ Application::Application(const QString &appId, int &argc, char **argv) : QtSingleApplication(appId, argc, argv) {
+ m_kdocker = 0;
++
++ // Translate UNIX signals to Qt signals (See https://doc.qt.io/qt-5/unix-signals.html)
++ if (::socketpair(AF_UNIX, SOCK_STREAM, 0, m_closeSignalFd))
++ qFatal("Couldn't create signal handling socketpair");
++
++ m_closeSignalSocketNotifier = new QSocketNotifier(m_closeSignalFd[1], QSocketNotifier::Read, this);
++ connect(m_closeSignalSocketNotifier, SIGNAL(activated(QSocketDescriptor)), this, SLOT(handleCloseSignal()));
+ }
+
+ void Application::setKDockerInstance(KDocker *kdocker) {
+ m_kdocker = kdocker;
+ }
+
+-void Application::close() {
++void Application::notifyCloseSignal() {
++ char tmp = 1;
++ ::write(m_closeSignalFd[0], &tmp, sizeof(tmp));
++}
++
++void Application::handleCloseSignal() {
++ m_closeSignalSocketNotifier->setEnabled(false);
++ char tmp;
++ ::read(m_closeSignalFd[1], &tmp, sizeof(tmp));
++
+ if (m_kdocker) {
+ m_kdocker->undockAll();
+ }
+ quit();
++
++ m_closeSignalSocketNotifier->setEnabled(true);
+ }
+diff --unified --recursive --text KDocker-5.3/src/application.h KDocker/src/application.h
+--- KDocker-5.3/src/application.h 2020-03-10 10:04:31.000000000 -0400
++++ KDocker/src/application.h 2022-04-04 17:06:38.897419076 -0400
+@@ -21,6 +21,7 @@
+ #define _APPLICATION_H
+
+ #include <QtSingleApplication>
++#include <QSocketNotifier>
+
+ #include "kdocker.h"
+
+@@ -32,10 +33,16 @@
+ Application(const QString &appId, int &argc, char **argv);
+
+ void setKDockerInstance(KDocker *kdocker);
+- void close();
++ void notifyCloseSignal();
++
++public slots:
++ void handleCloseSignal();
+
+ private:
+ KDocker *m_kdocker;
++
++ static int m_closeSignalFd[2];
++ QSocketNotifier *m_closeSignalSocketNotifier;
+ };
+
+ #endif /* _APPLICATION_H */
+diff --unified --recursive --text KDocker-5.3/src/main.cpp KDocker/src/main.cpp
+--- KDocker-5.3/src/main.cpp 2020-03-10 10:04:31.000000000 -0400
++++ KDocker/src/main.cpp 2022-04-04 17:06:38.897419076 -0400
+@@ -33,7 +33,7 @@
+ static void sighandler(int sig) {
+ Q_UNUSED(sig);
+
+- dynamic_cast<Application*> (qApp)->close();
++ dynamic_cast<Application*> (qApp)->notifyCloseSignal();
+ }
+
+ int main(int argc, char *argv[]) {