File indexing completed on 2024-04-21 03:55:15
0001 /* 0002 SPDX-FileCopyrightText: 2022 David Faure <faure@kde.org> 0003 SPDX-FileCopyrightText: 2022 Harald Sitter <sitter@kde.org> 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "kiocoredebug.h" 0008 #include "slavebase.h" 0009 #include "workerbase.h" 0010 #include "workerbase_p.h" 0011 #include "workerfactory.h" 0012 #include "workerthread_p.h" 0013 0014 namespace KIO 0015 { 0016 0017 WorkerThread::WorkerThread(QObject *parent, WorkerFactory *factory, const QByteArray &appSocket) 0018 : QThread(parent) 0019 , m_factory(factory) 0020 , m_appSocket(appSocket) 0021 { 0022 } 0023 0024 WorkerThread::~WorkerThread() 0025 { 0026 wait(); 0027 } 0028 0029 void WorkerThread::abort() 0030 { 0031 QMutexLocker locker(&m_workerMutex); 0032 if (m_worker) { // not deleted yet 0033 m_worker->exit(); 0034 } 0035 } 0036 0037 void WorkerThread::run() 0038 { 0039 qCDebug(KIO_CORE) << QThread::currentThreadId() << "Creating threaded worker"; 0040 0041 auto worker = m_factory->createWorker({}, m_appSocket); 0042 SlaveBase *base = &(worker->d->bridge); 0043 0044 base->setRunInThread(true); 0045 setWorker(base); 0046 0047 base->dispatchLoop(); 0048 0049 setWorker(nullptr); // before the actual deletion 0050 } 0051 0052 void WorkerThread::setWorker(SlaveBase *worker) 0053 { 0054 QMutexLocker locker(&m_workerMutex); 0055 m_worker = worker; 0056 } 0057 0058 } // namespace KIO 0059 0060 #include "moc_workerthread_p.cpp"