summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'kde-frameworks/kactivities/files/kactivities-5.19.0-crash.patch')
-rw-r--r--kde-frameworks/kactivities/files/kactivities-5.19.0-crash.patch89
1 files changed, 89 insertions, 0 deletions
diff --git a/kde-frameworks/kactivities/files/kactivities-5.19.0-crash.patch b/kde-frameworks/kactivities/files/kactivities-5.19.0-crash.patch
new file mode 100644
index 000000000000..001fbb26ea4c
--- /dev/null
+++ b/kde-frameworks/kactivities/files/kactivities-5.19.0-crash.patch
@@ -0,0 +1,89 @@
+From b3c8ad1ad48d65ea77724f94073909dc8ab97596 Mon Sep 17 00:00:00 2001
+From: David Edmundson <david@davidedmundson.co.uk>
+Date: Sat, 6 Feb 2016 18:02:53 +0000
+Subject: [PATCH] Fix crash in activities context menu
+
+Currently we call deleteLater() from inside ::run which is running in a
+different thread than the receiving object.
+(QThread objects live in the thread that created them, not in the thread
+they create)
+
+This patch causes deleteLater to be run in the right thread.
+
+QCoreApplication::postEvent is thread safe but it needs to be in the
+right thread to work out the correct event loop level for deferred
+delete events.
+
+BUG: 351485
+REVIEW: 126955
+---
+ src/workspace/fileitemplugin/FileItemLinkingPlugin.cpp | 2 +-
+ .../fileitemplugin/FileItemLinkingPluginActionLoader.cpp | 9 +++++++--
+ src/workspace/fileitemplugin/FileItemLinkingPluginActionLoader.h | 4 ++--
+ 3 files changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/src/workspace/fileitemplugin/FileItemLinkingPlugin.cpp b/src/workspace/fileitemplugin/FileItemLinkingPlugin.cpp
+index a887132..f3f6dde 100644
+--- a/src/workspace/fileitemplugin/FileItemLinkingPlugin.cpp
++++ b/src/workspace/fileitemplugin/FileItemLinkingPlugin.cpp
+@@ -124,7 +124,7 @@ void FileItemLinkingPlugin::Private::loadAllActions()
+ setActions({ action });
+
+ } else if (!loaded) {
+- auto loader = new FileItemLinkingPluginActionLoader(items);
++ auto loader = FileItemLinkingPluginActionLoader::create(items);
+
+ static FileItemLinkingPluginActionStaticInit init;
+
+diff --git a/src/workspace/fileitemplugin/FileItemLinkingPluginActionLoader.cpp b/src/workspace/fileitemplugin/FileItemLinkingPluginActionLoader.cpp
+index 3343eb4..b35713d 100644
+--- a/src/workspace/fileitemplugin/FileItemLinkingPluginActionLoader.cpp
++++ b/src/workspace/fileitemplugin/FileItemLinkingPluginActionLoader.cpp
+@@ -40,6 +40,13 @@
+
+ #include "common/dbus/common.h"
+
++FileItemLinkingPluginActionLoader* FileItemLinkingPluginActionLoader::create(const KFileItemListProperties &items)
++{
++ auto l = new FileItemLinkingPluginActionLoader(items);
++ connect(l, &QThread::finished, l, &QObject::deleteLater);
++ return l;
++}
++
+ FileItemLinkingPluginActionLoader::FileItemLinkingPluginActionLoader(
+ const KFileItemListProperties &items)
+ : items(items)
+@@ -150,8 +157,6 @@ void FileItemLinkingPluginActionLoader::run()
+ }
+
+ emit result(actions);
+-
+- deleteLater();
+ }
+
+ Action
+diff --git a/src/workspace/fileitemplugin/FileItemLinkingPluginActionLoader.h b/src/workspace/fileitemplugin/FileItemLinkingPluginActionLoader.h
+index 50dccc5..5264a45 100644
+--- a/src/workspace/fileitemplugin/FileItemLinkingPluginActionLoader.h
++++ b/src/workspace/fileitemplugin/FileItemLinkingPluginActionLoader.h
+@@ -33,8 +33,7 @@ class FileItemLinkingPluginActionLoader: public QThread {
+ Q_OBJECT
+
+ public:
+- FileItemLinkingPluginActionLoader(const KFileItemListProperties &items);
+-
++ static FileItemLinkingPluginActionLoader* create(const KFileItemListProperties &items);
+ void run() Q_DECL_OVERRIDE;
+
+ Action createAction(const QString &activity, bool link,
+@@ -46,6 +45,7 @@ Q_SIGNALS:
+ void result(const ActionList &actions);
+
+ private:
++ FileItemLinkingPluginActionLoader(const KFileItemListProperties &items);
+ KFileItemListProperties items;
+ KActivities::Consumer activities;
+ };
+--
+2.4.10
+