Details
-
Bug
-
Resolution: Fixed
-
P2: Important
-
6.10
-
a0e0425a1 (dev), e6a294a69 (6.9), b7446b1f5 (dev), 12dfc8d5e (dev), 407663802 (dev), e2c755de8 (6.8), f579f23d3 (tqtc/lts-6.5), 5cafb9c76 (6.9), b7aae9924 (6.9), aac28b280 (6.8), 0902a10ba (6.8), 75ba592bb (tqtc/lts-6.5)
Description
After the latest round of fixes (topic=asan, topic=ubsan), tst_QDockWidget:: deleteFloatingTabWithSingleDockWidget() still leaks:
Running tst_qdockwidget "deleteFloatingTabWithSingleDockWidget:Close child", I get:
Direct leak of 24 byte(s) in 1 object(s) allocated from: #0 0x7fb3c9037f37 in operator new(unsigned long) ../../../../gcc/libsanitizer/asan/asan_new_delete.cpp:99 #1 0x7fb3bce7dfdb in QDockAreaLayoutInfo::add(QWidget*) /home/marc/Qt/qtbase-submit/src/widgets/widgets/qdockarealayout.cpp:1800 #2 0x7fb3bd3a03c7 in QMainWindowLayout::hover(QLayoutItem*, QPoint const&) /home/marc/Qt/qtbase-submit/src/widgets/widgets/qmainwindowlayout.cpp:3067 #3 0x7fb3bcef16ae in QDockWidgetPrivate::mouseMoveEvent(QMouseEvent*) /home/marc/Qt/qtbase-submit/src/widgets/widgets/qdockwidget.cpp:1052 #4 0x7fb3bcf3efd9 in QDockWidget::event(QEvent*) /home/marc/Qt/qtbase-submit/src/widgets/widgets/qdockwidget.cpp:1704 #5 0x7fb3bb4f3351 in QApplicationPrivate::notify_helper(QObject*, QEvent*) /home/marc/Qt/qtbase-submit/src/widgets/kernel/qapplication.cpp:3309 #6 0x7fb3bb57b3e3 in QApplication::notify(QObject*, QEvent*) /home/marc/Qt/qtbase-submit/src/widgets/kernel/qapplication.cpp:2786 #7 0x559519ad302e in mouseEvent /home/marc/Qt/qtbase-submit/src/testlib/qtestmouse.h:216 #8 0x559519ae2b64 in QTest::mouseMove(QWidget*, QPoint, int) /home/marc/Qt/qtbase-submit/src/testlib/qtestmouse.h:242 #9 0x559519ae2b64 in tst_QDockWidget::moveDockWidget(QDockWidget*, QPoint, QPoint, tst_QDockWidget::MoveDockWidgetRule) const /home/marc/Qt/qtbase-submit/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp:1282 #10 0x559519b514c5 in tst_QDockWidget::createFloatingTabs(QMainWindow*&, QPointer<QWidget>&, QPointer<QDockWidget>&, QPointer<QDockWidget>&, QList<int>&, QList<int>&) const /home/marc/Qt/qtbase-submit/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp:1469 #11 0x559519b698e0 in tst_QDockWidget::deleteFloatingTabWithSingleDockWidget() /home/marc/Qt/qtbase-submit/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp:1611 #12 0x559519ba6d16 in tst_QDockWidget::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) /home/marc/Qt/qtbase-submit-build/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget_autogen/include/tst_qdockwidget.moc:191 #13 0x559519ba8253 in tst_QDockWidget::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) /home/marc/Qt/qtbase-submit-build/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget_autogen/include/tst_qdockwidget.moc:162 #14 0x7fb3931a513b in QMetaMethodInvoker::invokeImpl(QMetaMethod, void*, Qt::ConnectionType, long long, void const* const*, char const* const*, QtPrivate::QMetaTypeInterface const* const*) /home/marc/Qt/qtbase-submit/src/corelib/kernel/qmetaobject.cpp:2801 #15 0x7fb3931ae94d in QMetaMethod::invokeImpl(QMetaMethod, void*, Qt::ConnectionType, long long, void const* const*, char const* const*, QtPrivate::QMetaTypeInterface const* const*) /home/marc/Qt/qtbase-submit/src/corelib/kernel/qmetaobject.cpp:2640 #16 0x7fb3c8878ff0 in std::enable_if<!std::disjunction<>::value, bool>::type QMetaMethod::invoke<void>(QObject*, Qt::ConnectionType, QTemplatedMetaMethodReturnArgument<void>) const /home/marc/Qt/qtbase-submit/src/corelib/kernel/qmetaobject.h:150 #17 0x7fb3c8878ff0 in std::enable_if<!std::disjunction<>::value, bool>::type QMetaMethod::invoke<>(QObject*, Qt::ConnectionType) const /home/marc/Qt/qtbase-submit/src/corelib/kernel/qmetaobject.h:162 #18 0x7fb3c8878ff0 in invokeTestMethodIfValid /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:434 #19 0x7fb3c88c84ea in QTest::TestMethods::invokeTestOnData(int) const /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1050 #20 0x7fb3c88d03a7 in operator() /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1368 #21 0x7fb3c88d03a7 in runWithWatchdog<QTest::TestMethods::invokeTest(int, QLatin1StringView, std::optional<QTest::WatchDog>&) const::<lambda()> > /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1251 #22 0x7fb3c88d03a7 in QTest::TestMethods::invokeTest(int, QLatin1String, std::optional<QTest::WatchDog>&) const /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1367 #23 0x7fb3c88d4f5b in QTest::TestMethods::invokeTests(QObject*) const /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1710 #24 0x7fb3c88da7c4 in QTest::qRun() /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1951 #25 0x7fb3c88dc977 in QTest::qExec(QObject*, int, char**) /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1823 #26 0x559519a5ccc1 in main /home/marc/Qt/qtbase-submit/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp:2053 #27 0x7fb38c925082 in __libc_start_main ../csu/libc-start.c:308 Direct leak of 24 byte(s) in 1 object(s) allocated from: #0 0x7fb3c9037f37 in operator new(unsigned long) ../../../../gcc/libsanitizer/asan/asan_new_delete.cpp:99 #1 0x7fb3bce7e537 in QDockAreaLayoutInfo::add(QWidget*) /home/marc/Qt/qtbase-submit/src/widgets/widgets/qdockarealayout.cpp:1805 #2 0x7fb3bd3a045d in QMainWindowLayout::hover(QLayoutItem*, QPoint const&) /home/marc/Qt/qtbase-submit/src/widgets/widgets/qmainwindowlayout.cpp:3069 #3 0x7fb3bcef16ae in QDockWidgetPrivate::mouseMoveEvent(QMouseEvent*) /home/marc/Qt/qtbase-submit/src/widgets/widgets/qdockwidget.cpp:1052 #4 0x7fb3bcf3efd9 in QDockWidget::event(QEvent*) /home/marc/Qt/qtbase-submit/src/widgets/widgets/qdockwidget.cpp:1704 #5 0x7fb3bb4f3351 in QApplicationPrivate::notify_helper(QObject*, QEvent*) /home/marc/Qt/qtbase-submit/src/widgets/kernel/qapplication.cpp:3309 #6 0x7fb3bb57b3e3 in QApplication::notify(QObject*, QEvent*) /home/marc/Qt/qtbase-submit/src/widgets/kernel/qapplication.cpp:2786 #7 0x559519ad302e in mouseEvent /home/marc/Qt/qtbase-submit/src/testlib/qtestmouse.h:216 #8 0x559519ae2b64 in QTest::mouseMove(QWidget*, QPoint, int) /home/marc/Qt/qtbase-submit/src/testlib/qtestmouse.h:242 #9 0x559519ae2b64 in tst_QDockWidget::moveDockWidget(QDockWidget*, QPoint, QPoint, tst_QDockWidget::MoveDockWidgetRule) const /home/marc/Qt/qtbase-submit/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp:1282 #10 0x559519b514c5 in tst_QDockWidget::createFloatingTabs(QMainWindow*&, QPointer<QWidget>&, QPointer<QDockWidget>&, QPointer<QDockWidget>&, QList<int>&, QList<int>&) const /home/marc/Qt/qtbase-submit/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp:1469 #11 0x559519b698e0 in tst_QDockWidget::deleteFloatingTabWithSingleDockWidget() /home/marc/Qt/qtbase-submit/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp:1611 #12 0x559519ba6d16 in tst_QDockWidget::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) /home/marc/Qt/qtbase-submit-build/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget_autogen/include/tst_qdockwidget.moc:191 #13 0x559519ba8253 in tst_QDockWidget::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) /home/marc/Qt/qtbase-submit-build/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget_autogen/include/tst_qdockwidget.moc:162 #14 0x7fb3931a513b in QMetaMethodInvoker::invokeImpl(QMetaMethod, void*, Qt::ConnectionType, long long, void const* const*, char const* const*, QtPrivate::QMetaTypeInterface const* const*) /home/marc/Qt/qtbase-submit/src/corelib/kernel/qmetaobject.cpp:2801 #15 0x7fb3931ae94d in QMetaMethod::invokeImpl(QMetaMethod, void*, Qt::ConnectionType, long long, void const* const*, char const* const*, QtPrivate::QMetaTypeInterface const* const*) /home/marc/Qt/qtbase-submit/src/corelib/kernel/qmetaobject.cpp:2640 #16 0x7fb3c8878ff0 in std::enable_if<!std::disjunction<>::value, bool>::type QMetaMethod::invoke<void>(QObject*, Qt::ConnectionType, QTemplatedMetaMethodReturnArgument<void>) const /home/marc/Qt/qtbase-submit/src/corelib/kernel/qmetaobject.h:150 #17 0x7fb3c8878ff0 in std::enable_if<!std::disjunction<>::value, bool>::type QMetaMethod::invoke<>(QObject*, Qt::ConnectionType) const /home/marc/Qt/qtbase-submit/src/corelib/kernel/qmetaobject.h:162 #18 0x7fb3c8878ff0 in invokeTestMethodIfValid /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:434 #19 0x7fb3c88c84ea in QTest::TestMethods::invokeTestOnData(int) const /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1050 #20 0x7fb3c88d03a7 in operator() /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1368 #21 0x7fb3c88d03a7 in runWithWatchdog<QTest::TestMethods::invokeTest(int, QLatin1StringView, std::optional<QTest::WatchDog>&) const::<lambda()> > /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1251 #22 0x7fb3c88d03a7 in QTest::TestMethods::invokeTest(int, QLatin1String, std::optional<QTest::WatchDog>&) const /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1367 #23 0x7fb3c88d4f5b in QTest::TestMethods::invokeTests(QObject*) const /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1710 #24 0x7fb3c88da7c4 in QTest::qRun() /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1951 #25 0x7fb3c88dc977 in QTest::qExec(QObject*, int, char**) /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1823 #26 0x559519a5ccc1 in main /home/marc/Qt/qtbase-submit/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp:2053 #27 0x7fb38c925082 in __libc_start_main ../csu/libc-start.c:308 Direct leak of 24 byte(s) in 1 object(s) allocated from: #0 0x7fb3c9037f37 in operator new(unsigned long) ../../../../gcc/libsanitizer/asan/asan_new_delete.cpp:99 #1 0x7fb3bce809ea in QDockAreaLayout::addDockWidget(QInternal::DockPosition, QDockWidget*, Qt::Orientation) /home/marc/Qt/qtbase-submit/src/widgets/widgets/qdockarealayout.cpp:3154 #2 0x7fb3bd325be0 in QMainWindowLayout::addDockWidget(Qt::DockWidgetArea, QDockWidget*, Qt::Orientation) /home/marc/Qt/qtbase-submit/src/widgets/widgets/qmainwindowlayout.cpp:1732 #3 0x7fb3bd2a2185 in QMainWindow::addDockWidget(Qt::DockWidgetArea, QDockWidget*, Qt::Orientation) /home/marc/Qt/qtbase-submit/src/widgets/widgets/qmainwindow.cpp:1071 #4 0x7fb3bd2a2185 in QMainWindow::addDockWidget(Qt::DockWidgetArea, QDockWidget*, Qt::Orientation) /home/marc/Qt/qtbase-submit/src/widgets/widgets/qmainwindow.cpp:1064 #5 0x7fb3bd2a5262 in QMainWindow::addDockWidget(Qt::DockWidgetArea, QDockWidget*) /home/marc/Qt/qtbase-submit/src/widgets/widgets/qmainwindow.cpp:1042 #6 0x559519a76134 in tst_QDockWidget::createTestWidgets(QMainWindow*&, QPointer<QWidget>&, QPointer<QDockWidget>&, QPointer<QDockWidget>&) const /home/marc/Qt/qtbase-submit/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp:1251 #7 0x559519b4b66c in tst_QDockWidget::createFloatingTabs(QMainWindow*&, QPointer<QWidget>&, QPointer<QDockWidget>&, QPointer<QDockWidget>&, QList<int>&, QList<int>&) const /home/marc/Qt/qtbase-submit/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp:1438 #8 0x559519b698e0 in tst_QDockWidget::deleteFloatingTabWithSingleDockWidget() /home/marc/Qt/qtbase-submit/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp:1611 #9 0x559519ba6d16 in tst_QDockWidget::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) /home/marc/Qt/qtbase-submit-build/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget_autogen/include/tst_qdockwidget.moc:191 #10 0x559519ba8253 in tst_QDockWidget::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) /home/marc/Qt/qtbase-submit-build/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget_autogen/include/tst_qdockwidget.moc:162 #11 0x7fb3931a513b in QMetaMethodInvoker::invokeImpl(QMetaMethod, void*, Qt::ConnectionType, long long, void const* const*, char const* const*, QtPrivate::QMetaTypeInterface const* const*) /home/marc/Qt/qtbase-submit/src/corelib/kernel/qmetaobject.cpp:2801 #12 0x7fb3931ae94d in QMetaMethod::invokeImpl(QMetaMethod, void*, Qt::ConnectionType, long long, void const* const*, char const* const*, QtPrivate::QMetaTypeInterface const* const*) /home/marc/Qt/qtbase-submit/src/corelib/kernel/qmetaobject.cpp:2640 #13 0x7fb3c8878ff0 in std::enable_if<!std::disjunction<>::value, bool>::type QMetaMethod::invoke<void>(QObject*, Qt::ConnectionType, QTemplatedMetaMethodReturnArgument<void>) const /home/marc/Qt/qtbase-submit/src/corelib/kernel/qmetaobject.h:150 #14 0x7fb3c8878ff0 in std::enable_if<!std::disjunction<>::value, bool>::type QMetaMethod::invoke<>(QObject*, Qt::ConnectionType) const /home/marc/Qt/qtbase-submit/src/corelib/kernel/qmetaobject.h:162 #15 0x7fb3c8878ff0 in invokeTestMethodIfValid /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:434 #16 0x7fb3c88c84ea in QTest::TestMethods::invokeTestOnData(int) const /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1050 #17 0x7fb3c88d03a7 in operator() /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1368 #18 0x7fb3c88d03a7 in runWithWatchdog<QTest::TestMethods::invokeTest(int, QLatin1StringView, std::optional<QTest::WatchDog>&) const::<lambda()> > /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1251 #19 0x7fb3c88d03a7 in QTest::TestMethods::invokeTest(int, QLatin1String, std::optional<QTest::WatchDog>&) const /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1367 #20 0x7fb3c88d4f5b in QTest::TestMethods::invokeTests(QObject*) const /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1710 #21 0x7fb3c88da7c4 in QTest::qRun() /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1951 #22 0x7fb3c88dc977 in QTest::qExec(QObject*, int, char**) /home/marc/Qt/qtbase-submit/src/testlib/qtestcase.cpp:1823 #23 0x559519a5ccc1 in main /home/marc/Qt/qtbase-submit/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp:2053 #24 0x7fb38c925082 in __libc_start_main ../csu/libc-start.c:308 SUMMARY: AddressSanitizer: 72 byte(s) leaked in 3 allocation(s).
The first two are from the mouse-dragging of dock widgets to floating: The QDockWidgetItem and the QDockWidgetGroupWindowItem created in QDockAreaLayoutInfo::add() called from QMainWindowLayout::hover() are never deleted again in QDockWidgetPrivate::endDrag() (or endDrag() is not even called from QDockWidgetPrivate::mouseReleaseEvent()).
These appear for each test that calls tst_QDockWidget::createFloatingTabs().
The last one only appears for the "Close child" data tag, so indicates that a mere QDockWidget::close() will leak the associated QDockWidgetItem.