Skip to content

Don't leak the slave's worker thread

Milian Wolff requested to merge work/fix-slave-workerthread-leak into master

Set the slave as parent for the WorkerThread, otherwise we would leak it.

Fixes LSAN report:

Indirect leak of 202 byte(s) in 1 object(s) allocated from:
    #0 0x7f2e740bfa89 in __interceptor_malloc /usr/src/debug/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
    #1 0x7f2e662ea443 in QArrayData::allocate(unsigned long, unsigned long, unsigned long, QFlags<QArrayData::AllocationOption>) (/usr/lib/libQt5Core.so.5+0xea443)
    #2 0x7f2e663326d4 in QByteArray::QByteArray(int, Qt::Initialization) (/usr/lib/libQt5Core.so.5+0x1326d4)
    #3 0x7f2e664db5a1  (/usr/lib/libQt5Core.so.5+0x2db5a1)
    #4 0x7f2e664d81aa in QTextCodec::fromUnicode(QStringView) const (/usr/lib/libQt5Core.so.5+0x2d81aa)
    #5 0x7f2e66366a86 in QString::toLocal8Bit_helper(QChar const*, int) (/usr/lib/libQt5Core.so.5+0x166a86)
    #6 0x7f2e678d7b42 in QString::toLocal8Bit() && /usr/include/qt/QtCore/qstring.h:690
    #7 0x7f2e678d7589 in KIO::Slave::createSlave(QString const&, QUrl const&, int&, QString&) /home/milian/projects/kde/src/kio/src/core/slave.cpp:457
    #8 0x7f2e67908d74 in KIO::ProtoQueue::createSlave(QString const&, KIO::SimpleJob*, QUrl const&) /home/milian/projects/kde/src/kio/src/core/scheduler.cpp:617
    ...

Indirect leak of 144 byte(s) in 1 object(s) allocated from:
    #0 0x7f2e740c0672 in operator new(unsigned long) /usr/src/debug/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f2e662e5dcc in QThread::QThread(QObject*) (/usr/lib/libQt5Core.so.5+0xe5dcc)
    #2 0x7f2e679792c7 in KIO::WorkerThread::WorkerThread(KIO::WorkerFactory*, QByteArray const&) /home/milian/projects/kde/src/kio/src/core/workerthread.cpp:16
    #3 0x7f2e678d759f in KIO::Slave::createSlave(QString const&, QUrl const&, int&, QString&) /home/milian/projects/kde/src/kio/src/core/slave.cpp:457
    #4 0x7f2e67908d74 in KIO::ProtoQueue::createSlave(QString const&, KIO::SimpleJob*, QUrl const&) /home/milian/projects/kde/src/kio/src/core/scheduler.cpp:617
    ...

Indirect leak of 120 byte(s) in 1 object(s) allocated from:
    #0 0x7f2e740c0672 in operator new(unsigned long) /usr/src/debug/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f2e662e5e3e in QThread::QThread(QObject*) (/usr/lib/libQt5Core.so.5+0xe5e3e)
    #2 0x7f2e679792c7 in KIO::WorkerThread::WorkerThread(KIO::WorkerFactory*, QByteArray const&) /home/milian/projects/kde/src/kio/src/core/workerthread.cpp:16
    #3 0x7f2e678d759f in KIO::Slave::createSlave(QString const&, QUrl const&, int&, QString&) /home/milian/projects/kde/src/kio/src/core/slave.cpp:457
    #4 0x7f2e67908d74 in KIO::ProtoQueue::createSlave(QString const&, KIO::SimpleJob*, QUrl const&) /home/milian/projects/kde/src/kio/src/core/scheduler.cpp:617
    ...

Indirect leak of 96 byte(s) in 1 object(s) allocated from:
    #0 0x7f2e740c0672 in operator new(unsigned long) /usr/src/debug/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f2e662eb4a9 in QWaitCondition::QWaitCondition() (/usr/lib/libQt5Core.so.5+0xeb4a9)
    #2 0x7f2e662e5e1a in QThread::QThread(QObject*) (/usr/lib/libQt5Core.so.5+0xe5e1a)
    #3 0x7f2e679792c7 in KIO::WorkerThread::WorkerThread(KIO::WorkerFactory*, QByteArray const&) /home/milian/projects/kde/src/kio/src/core/workerthread.cpp:16
    #4 0x7f2e678d759f in KIO::Slave::createSlave(QString const&, QUrl const&, int&, QString&) /home/milian/projects/kde/src/kio/src/core/slave.cpp:457
    #5 0x7f2e67908d74 in KIO::ProtoQueue::createSlave(QString const&, KIO::SimpleJob*, QUrl const&) /home/milian/projects/kde/src/kio/src/core/scheduler.cpp:617
    ...

Indirect leak of 48 byte(s) in 1 object(s) allocated from:
    #0 0x7f2e740c0672 in operator new(unsigned long) /usr/src/debug/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f2e678d753d in KIO::Slave::createSlave(QString const&, QUrl const&, int&, QString&) /home/milian/projects/kde/src/kio/src/core/slave.cpp:457
    ....

Merge request reports