Здравствуйте
Имеется программа, написанная на Qt (С++), которая парсит входящие файлы и запихивает их в базу данных. Проблема заключается в том, что по каким-то непонятным причинам обьект, хранящий результат, не удаляется. А самое интересное заключается в том, что проблема происходит исключительно на линуксе (fedora).
Немного дополнительной информации:
1. Обработка каждого файла происходит в разных потоках. Создание нового потока реализовано в таком виде:
QThread *_t = new QThread();
QObject::connect(_t, SIGNAL(started()), task.data(), SLOT(run()), Qt::DirectConnection);
QObject::connect(task.data(), SIGNAL(finished()), this, SLOT(taskFinished()));
QObject::connect(_t, SIGNAL(finished()), _t, SLOT(quit()));
QObject::connect(_t, SIGNAL(finished()), _t, SLOT(deleteLater()));
QObject::connect(task.data(), SIGNAL(finished()), _t, SLOT(quit()));
_t->start();
3. Обработанные данные кладутся в
struct LineParseResult { QString article, brand, price, stock, multiplicity, __article, price_id; QByteArray key; };
typedef QList<LineParseResult> PResult;
auto _task = qobject_cast<ParserTask *>(QObject::sender());
QList<QSharedPointer<ParserTask>> m_currentRunningTasks;
auto task = m_currentRunningTasks.takeAt(i);
task.clear();
После всех проделанных операций происходят разные вещи на Windows 10 и Linux, а именно программа, которая работает на Linux (диструбтив указан в начале) потребляет гораздо больше памяти, что не так страшно, как то, что память, которая занята после обработки файла, не очищается даже принудительно. На Windows же обратное, программа ест мало памяти и очищает ее после отработки
Программа была проверена валгриндом, который говорит, что утечек не имеется
Что это может быть и как с этим бороться?