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"