60 lines
1.5 KiB
Diff
60 lines
1.5 KiB
Diff
|
|
diff -Naur ukui-settings-daemon-3.1.2/daemon/main.cpp ukui-settings-daemon-3.1.2~/daemon/main.cpp
|
|||
|
|
--- ukui-settings-daemon-3.1.2/daemon/main.cpp 2022-04-15 11:36:50.000000000 +0800
|
|||
|
|
+++ ukui-settings-daemon-3.1.2~/daemon/main.cpp 2023-07-06 17:50:20.704690501 +0800
|
|||
|
|
@@ -31,7 +31,8 @@
|
|||
|
|
|
|||
|
|
#include <sys/types.h>
|
|||
|
|
#include <signal.h>
|
|||
|
|
-
|
|||
|
|
+#include <syslog.h>
|
|||
|
|
+#include <QTimer>
|
|||
|
|
static void print_help ();
|
|||
|
|
static void parse_args (int argc, char *argv[]);
|
|||
|
|
static void stop_daemon ();
|
|||
|
|
@@ -46,6 +47,15 @@
|
|||
|
|
QApplication::exit(15);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
+void handlerA(int no)
|
|||
|
|
+{
|
|||
|
|
+ USD_LOG(LOG_DEBUG,"catch SIGABRT signal, with exitcode %d",no);
|
|||
|
|
+
|
|||
|
|
+
|
|||
|
|
+// manager->managerStop();
|
|||
|
|
+ QApplication::exit(15);
|
|||
|
|
+}
|
|||
|
|
+
|
|||
|
|
int main (int argc, char* argv[])
|
|||
|
|
{
|
|||
|
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
|
|||
|
|
@@ -63,6 +73,7 @@
|
|||
|
|
|
|||
|
|
|
|||
|
|
signal(SIGTERM, &handler);
|
|||
|
|
+ signal(SIGABRT, &handlerA);
|
|||
|
|
QApplication::setQuitOnLastWindowClosed(false);
|
|||
|
|
|
|||
|
|
QTranslator translator;
|
|||
|
|
@@ -88,6 +99,21 @@
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
+ QObject::connect(&app,&QCoreApplication::aboutToQuit,[&]{
|
|||
|
|
+
|
|||
|
|
+ //PluginManager::getInstance()->managerStop();
|
|||
|
|
+ //managerStop()执行时间过长,导致注销时,所有插件未完全Daectivity就已经强行关闭系统,最终导致SIGSEGV、SIGABRT
|
|||
|
|
+
|
|||
|
|
+ app.processEvents();
|
|||
|
|
+ //QTimer timer;
|
|||
|
|
+ // Wait until the event loop starts
|
|||
|
|
+ QTimer::singleShot(500, [=](){
|
|||
|
|
+
|
|||
|
|
+ exit(0);
|
|||
|
|
+ });
|
|||
|
|
+
|
|||
|
|
+ });
|
|||
|
|
+
|
|||
|
|
USD_LOG(LOG_INFO, "ukui-settings-daemon started!");
|
|||
|
|
return app.exec();
|
|||
|
|
}
|