# HG changeset patch # User unc0rr # Date 1394050731 -14400 # Node ID 0f9042536c46d7194e0bac03a3af547907666faa # Parent ea022e9483c24f6a50c1bd7e41083f1c2bbb8033 Don't run two engine threads simultaneously diff -r ea022e9483c2 -r 0f9042536c46 QTfrontend/net/tcpBase.cpp --- a/QTfrontend/net/tcpBase.cpp Wed Mar 05 00:53:08 2014 +0400 +++ b/QTfrontend/net/tcpBase.cpp Thu Mar 06 00:18:51 2014 +0400 @@ -43,6 +43,7 @@ EngineInstance::~EngineInstance() { + qDebug() << "EngineInstance delete" << QThread::currentThreadId(); } void EngineInstance::setArguments(const QStringList & arguments) @@ -64,7 +65,11 @@ void EngineInstance::start() { + qDebug() << "EngineInstance start" << QThread::currentThreadId(); + RunEngine(m_argv.size(), m_argv.data()); + + emit finished(); } #endif @@ -74,6 +79,23 @@ TCPBase::~TCPBase() { + if(m_hasStarted) + { + if(IPCSocket) + IPCSocket->close(); + + if(m_connected) + { +#ifdef HWLIBRARY + if(!thread) + qDebug("WTF"); + thread->quit(); + thread->wait(); +#else + process->waitForFinished(1000); +#endif + } + } // make sure this object is not in the server list anymore srvsList.removeOne(this); @@ -135,7 +157,7 @@ IPCSocket = 0; #ifdef HWLIBRARY - QThread *thread = new QThread(); + thread = new QThread(this); EngineInstance *instance = new EngineInstance(); instance->setArguments(getArguments()); @@ -147,8 +169,7 @@ connect(instance, SIGNAL(finished()), thread, SLOT(deleteLater())); thread->start(); #else - QProcess * process; - process = new QProcess(); + process = new QProcess(this); connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(StartProcessError(QProcess::ProcessError))); QStringList arguments = getArguments(); @@ -168,7 +189,13 @@ onClientDisconnect(); if(!simultaneousRun()) + { +#ifdef HWLIBRARY + thread->quit(); + thread->wait(); +#endif emit isReadyNow(); + } IPCSocket->deleteLater(); deleteLater(); @@ -176,9 +203,9 @@ void TCPBase::ClientRead() { - QByteArray readed=IPCSocket->readAll(); - if(readed.isEmpty()) return; - readbuffer.append(readed); + QByteArray read = IPCSocket->readAll(); + if(read.isEmpty()) return; + readbuffer.append(read); onClientRead(); } @@ -211,7 +238,7 @@ && (last->parent() == parent())) { srvsList.removeLast(); - last->deleteLater(); + delete last; Start(couldCancelPreviousRequest); } else { diff -r ea022e9483c2 -r 0f9042536c46 QTfrontend/net/tcpBase.h --- a/QTfrontend/net/tcpBase.h Wed Mar 05 00:53:08 2014 +0400 +++ b/QTfrontend/net/tcpBase.h Thu Mar 06 00:18:51 2014 +0400 @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -72,7 +73,11 @@ private: static QPointer IPCServer; - +#ifdef HWLIBRARY + QThread * thread; +#else + QProcess * process; +#endif bool m_isDemoMode; bool m_connected; void RealStart(); @@ -98,9 +103,11 @@ void setArguments(const QStringList & arguments); public slots: - void start(void); + void start(); + signals: - void finished(void); + void finished(); + private: QList m_arguments; QVector m_argv;