From 15e069f3e078dd97e7cc99a66b77b2647a82c53d Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Wed, 8 Apr 2015 11:30:23 -0500 Subject: Ensure kdesktop signal handlers execute in the main GUI thread (cherry picked from commit 755776b6c4875dddd0fa2971845252274215d86a) --- kdesktop/krootwm.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'kdesktop/krootwm.cc') diff --git a/kdesktop/krootwm.cc b/kdesktop/krootwm.cc index 677c81f65..756d0b5b5 100644 --- a/kdesktop/krootwm.cc +++ b/kdesktop/krootwm.cc @@ -77,10 +77,12 @@ KRootWm::KRootWm(KDesktop* _desktop) : TQObject(_desktop), startup(FALSE) m_helperThread->start(); m_threadHelperObject = new KRootWmThreadHelperObject; m_threadHelperObject->moveToThread(m_helperThread); + connect(this, TQT_SIGNAL(initializeHelperThread()), m_threadHelperObject, TQT_SLOT(initializeThread())); connect(this, TQT_SIGNAL(terminateHelperThread()), m_threadHelperObject, TQT_SLOT(terminateThread())); connect(this, TQT_SIGNAL(asyncLock()), m_threadHelperObject, TQT_SLOT(slotLock())); connect(this, TQT_SIGNAL(asyncLockAndDoNewSession()), m_threadHelperObject, TQT_SLOT(lockAndDoNewSession())); connect(this, TQT_SIGNAL(asyncSlotSessionActivated(int)), m_threadHelperObject, TQT_SLOT(slotSessionActivated(int))); + initializeHelperThread(); s_rootWm = this; m_actionCollection = new TDEActionCollection(_desktop, this, "KRootWm::m_actionCollection"); @@ -880,6 +882,16 @@ void KRootWm::slotPopulateSessions() } } +void KRootWmThreadHelperObject::initializeThread() { + // Prevent kdesktop_lock signals from being handled by the wrong (non-GUI) thread + sigset_t set; + sigemptyset(&set); + sigaddset(&set, SIGUSR1); + sigaddset(&set, SIGUSR2); + sigaddset(&set, SIGTTIN); + pthread_sigmask(SIG_BLOCK, &set, NULL); +} + void KRootWmThreadHelperObject::terminateThread() { TQEventLoop* eventLoop = TQApplication::eventLoop(); if (eventLoop) { -- cgit v1.2.1