tst_QHostInfo: fix mem-leaks in threadSafetyAsynchronousAPI()
Allocate participating threads and objects on the stack, not the heap.
As a drive-by, port from QList to C arrays (never use a
dynamically-sized container for statically-sized data™).
Code predates the public history, all active branches are affected.
Change-Id: If8def658c1c7b505074938d637e78ad2d1f9fd57
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
(cherry picked from commit 69d767bec2
)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
7d55bf65fb
commit
db1bf57a29
@ -43,7 +43,6 @@
|
|||||||
|
|
||||||
#define TEST_DOMAIN ".test.qt-project.org"
|
#define TEST_DOMAIN ".test.qt-project.org"
|
||||||
|
|
||||||
|
|
||||||
class tst_QHostInfo : public QObject
|
class tst_QHostInfo : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -552,24 +551,22 @@ void tst_QHostInfo::threadSafetyAsynchronousAPI()
|
|||||||
{
|
{
|
||||||
const int nattempts = 10;
|
const int nattempts = 10;
|
||||||
const int lookupsperthread = 10;
|
const int lookupsperthread = 10;
|
||||||
QList<QThread*> threads;
|
QThread threads[nattempts];
|
||||||
QList<LookupReceiver*> receivers;
|
LookupReceiver receivers[nattempts];
|
||||||
for (int i = 0; i < nattempts; ++i) {
|
for (int i = 0; i < nattempts; ++i) {
|
||||||
QThread* thread = new QThread;
|
QThread *thread = &threads[i];
|
||||||
LookupReceiver* receiver = new LookupReceiver;
|
LookupReceiver *receiver = &receivers[i];
|
||||||
receiver->numrequests = lookupsperthread;
|
receiver->numrequests = lookupsperthread;
|
||||||
receivers.append(receiver);
|
|
||||||
receiver->moveToThread(thread);
|
receiver->moveToThread(thread);
|
||||||
connect(thread, SIGNAL(started()), receiver, SLOT(start()));
|
connect(thread, SIGNAL(started()), receiver, SLOT(start()));
|
||||||
thread->start();
|
thread->start();
|
||||||
threads.append(thread);
|
|
||||||
}
|
}
|
||||||
for (int k = threads.size() - 1; k >= 0; --k)
|
for (int k = nattempts - 1; k >= 0; --k)
|
||||||
QVERIFY(threads.at(k)->wait(60000));
|
QVERIFY(threads[k].wait(60000));
|
||||||
foreach (LookupReceiver* receiver, receivers) {
|
for (LookupReceiver &receiver : receivers) {
|
||||||
QCOMPARE(receiver->result.error(), QHostInfo::NoError);
|
QCOMPARE(receiver.result.error(), QHostInfo::NoError);
|
||||||
QCOMPARE(receiver->result.addresses().at(0).toString(), QString("192.0.2.1"));
|
QCOMPARE(receiver.result.addresses().at(0).toString(), QString("192.0.2.1"));
|
||||||
QCOMPARE(receiver->numrequests, 0);
|
QCOMPARE(receiver.numrequests, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user