Russian Qt Forum

Qt => Работа с сетью => Тема начата: arial от Августа 12, 2009, 10:30



Название: QTcpSocket connectToHost утечка памяти
Отправлено: arial от Августа 12, 2009, 10:30
В QTcpSocket при каждом connectToHost течёт память.

Нашёл описание проблемы здесь (http://qt.nokia.com/developer/task-tracker/index_html?method=entry&id=115230), но как исправить - не знаю.

Тестовый пример прилагаю.


Название: Re: QTcpSocket connectToHost утечка памяти
Отправлено: Winstrol от Августа 12, 2009, 11:18
В QTcpSocket при каждом connectToHost течёт память.

Нашёл описание проблемы здесь (http://qt.nokia.com/developer/task-tracker/index_html?method=entry&id=115230), но как исправить - не знаю.
Тестовый пример прилагаю.
Сделай слот с основной работой, который будет вызываться в цикле обработки сообщений, а не до вызова a.exec()
Код
C++ (Qt)
   QTimer::singleShot(0, &testClass, SLOT(startTest()));
   a.exec();
 


Название: Re: QTcpSocket connectToHost утечка памяти
Отправлено: arial от Августа 12, 2009, 13:14
Дык у меня так и сделано.
Код:
void TestClass::Tick()
{
    Connect();
    QTimer::singleShot(1000, this, SLOT(Tick()));
}


Название: Re: QTcpSocket connectToHost утечка памяти
Отправлено: pastor от Августа 12, 2009, 17:04
Какая у тебя версия Qt? Судя по статусу проблемы она уже и исправлена в Qt начиная с 4.2.0.


Название: Re: QTcpSocket connectToHost утечка памяти
Отправлено: arial от Августа 12, 2009, 18:29
У меня 4.5.


Название: Re: QTcpSocket connectToHost утечка памяти
Отправлено: pastor от Августа 12, 2009, 20:15
Отправляй повторный репорт, с ссылкой на старый и примечанием "регресс". (Если ты конечно уверен что это баг)


Название: Re: QTcpSocket connectToHost утечка памяти
Отправлено: arial от Августа 12, 2009, 21:18
Я, собственно, и выложил небольшой исходничек, чтобы ещё кто-нибудь проверил. Может это я что накосячил, а не баг вовсе.


Название: Re: QTcpSocket connectToHost утечка памяти
Отправлено: Winstrol от Августа 12, 2009, 21:31
Я, собственно, и выложил небольшой исходничек, чтобы ещё кто-нибудь проверил. Может это я что накосячил, а не баг вовсе.
На 4.5 под XP тоже утекает память вместе с хендлами.


Название: Re: QTcpSocket connectToHost утечка памяти
Отправлено: arial от Августа 21, 2009, 12:05
Огромная просьба, у кого нормально с английским - зарепортите, пожалуйста, этот баг, а то я и двух слов по английски связать не могу.


Название: Re: QTcpSocket connectToHost утечка памяти
Отправлено: ритт от Августа 21, 2009, 14:45
слегка изменил тест и что-то у меня ничего не утекает - ни память, ни хэндлы

Код
C++ (Qt)
void TestClass::Connect()
{
   QTcpSocket *socket = new QTcpSocket();
 
   socket->connectToHost(HostAddress, 80, QTcpSocket::ReadOnly);
 
   if (!socket->waitForConnected(1000) ||
       socket->state() != QTcpSocket::ConnectedState ||
       !socket->isValid()) {
       qDebug() << "Connection error";
delete socket;
       return;
   }
   qDebug() << QString("Connected to %1").arg(HostAddress);
 
 
   socket->disconnectFromHost();
 
   if (socket->state() != QAbstractSocket::UnconnectedState &&
       !socket->waitForDisconnected(1000)) {
       socket->abort();
       qDebug() << "Disonnection aborted";
delete socket;
       return;
   }
   qDebug() << QString("Disconnected from %1").arg(HostAddress);
 
   delete socket;
}
 


Название: Re: QTcpSocket connectToHost утечка памяти
Отправлено: Winstrol от Августа 21, 2009, 15:37
слегка изменил тест и что-то у меня ничего не утекает - ни память, ни хэндлы
Qt 4.5.2 Win XP. Течет и память и хенлы. Возможно как-то связано реализацией ассинхронности через HWND.