Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-135442

QDockWidget/QMainWindow leak widgetItems from QDockAreaLayoutItem on dragging and QDockWidget::close()

    XMLWordPrintable

Details

    • 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.

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            axelspoerl Axel Spoerl
            mmutz Marc Mutz
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: