forked from qt-creator/qt-creator
Valgrind: Split parse() into setIODevice() and start()
Make the API more TaskTree friendly. Change-Id: I5119e38b5fc3cce234395fc5db5c73cf0c474ac0 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -1065,7 +1065,8 @@ void MemcheckToolPrivate::loadXmlLogFile(const QString &filePath)
|
||||
parser->deleteLater();
|
||||
});
|
||||
|
||||
parser->parse(logFile); // ThreadedParser owns the file
|
||||
parser->setIODevice(logFile);
|
||||
parser->start();
|
||||
}
|
||||
|
||||
void MemcheckToolPrivate::parserError(const Error &error)
|
||||
|
@@ -68,7 +68,8 @@ void ValgrindRunner::Private::xmlSocketConnected()
|
||||
QTcpSocket *socket = m_xmlServer.nextPendingConnection();
|
||||
QTC_ASSERT(socket, return);
|
||||
m_xmlServer.close();
|
||||
m_parser.parse(socket);
|
||||
m_parser.setIODevice(socket);
|
||||
m_parser.start();
|
||||
}
|
||||
|
||||
void ValgrindRunner::Private::logSocketConnected()
|
||||
|
@@ -41,9 +41,17 @@ bool ThreadedParser::isRunning() const
|
||||
return m_parserThread ? m_parserThread->isRunning() : false;
|
||||
}
|
||||
|
||||
void ThreadedParser::parse(QIODevice *device)
|
||||
void ThreadedParser::setIODevice(QIODevice *device)
|
||||
{
|
||||
QTC_ASSERT(device, return);
|
||||
QTC_ASSERT(device->isOpen(), return);
|
||||
m_device.reset(device);
|
||||
}
|
||||
|
||||
void ThreadedParser::start()
|
||||
{
|
||||
QTC_ASSERT(!m_parserThread, return);
|
||||
QTC_ASSERT(m_device, return);
|
||||
|
||||
auto parser = new Parser;
|
||||
qRegisterMetaType<Status>();
|
||||
@@ -54,10 +62,10 @@ void ThreadedParser::parse(QIODevice *device)
|
||||
|
||||
m_parserThread = new Thread;
|
||||
connect(m_parserThread.get(), &QThread::finished, m_parserThread.get(), &QObject::deleteLater);
|
||||
device->setParent(nullptr);
|
||||
device->moveToThread(m_parserThread);
|
||||
m_device->setParent(nullptr);
|
||||
m_device->moveToThread(m_parserThread);
|
||||
parser->moveToThread(m_parserThread);
|
||||
m_parserThread->m_device = device;
|
||||
m_parserThread->m_device = m_device.release();
|
||||
m_parserThread->m_parser = parser;
|
||||
m_parserThread->start();
|
||||
}
|
||||
|
@@ -31,8 +31,10 @@ public:
|
||||
bool waitForFinished();
|
||||
bool isRunning() const;
|
||||
|
||||
// The passed device needs to be open. The parser takes ownership of the passed device.
|
||||
void setIODevice(QIODevice *device);
|
||||
///@warning will move @p stream to a different thread and take ownership of it
|
||||
void parse(QIODevice *stream);
|
||||
void start();
|
||||
|
||||
signals:
|
||||
void status(const Status &status);
|
||||
@@ -40,6 +42,7 @@ signals:
|
||||
void done(bool success, const QString &errorString);
|
||||
|
||||
private:
|
||||
std::unique_ptr<QIODevice> m_device;
|
||||
QPointer<Thread> m_parserThread;
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user