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

QWaylandBufferRef::toOpenGLTexture leaks textures

    XMLWordPrintable

Details

    • Linux/Wayland
    • bd3cdc5c1 (dev), 97b70d6b4 (6.8), dae39b041 (6.7), 74bab5da8 (tqtc/lts-6.5)

    Description

      m_shmTexture in QtWayland::SharedMemoryBuffer is never freed.

      Can be reproduced with for example minimal-cpp example and when running a widget based client application.

      After 200 runs of opening an empty QWidget against minimal-cpp:

      6,656 (6,400 direct, 256 indirect) bytes in 32 blocks are definitely lost in loss record 10,471 of 10,529
        in View::getTexture() in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/compositor.cpp:18
        1: operator new(unsigned long) in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so
        2: QOpenGLTexture::QOpenGLTexture(QOpenGLTexture::Target) in /home/qt/work/qt/qtbase/src/opengl/qopengltexture.cpp:2446
        3: QtWayland::SharedMemoryBuffer::toOpenGlTexture(int) in /home/qt/work/qt/qtwayland/src/compositor/wayland_wrapper/qwlclientbuffer.cpp:131
        4: View::getTexture() in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/compositor.cpp:18
        5: Window::paintGL() in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/window.cpp:43
        6: paint in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow_p.h:63
        7: doFlush in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow_p.h:73
        8: handleUpdateEvent in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow_p.h:81
        9: QPaintDeviceWindow::event(QEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow.cpp:163
        10: QCoreApplication::notifyInternal2(QObject*, QEvent*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1142
        11: QPlatformWindow::deliverUpdateRequest() in /home/qt/work/qt/qtbase/src/gui/kernel/qplatformwindow.cpp:792
        12: QPlatformWindow::windowEvent(QEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qplatformwindow.cpp:454
        13: QGuiApplication::notify(QObject*, QEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qguiapplication.cpp:1988
        14: QCoreApplication::notifyInternal2(QObject*, QEvent*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1142
        15: QTimerInfoList::activateTimers() in /home/qt/work/qt/qtbase/src/corelib/kernel/qtimerinfo_unix.cpp:434
        16: timerSourceDispatch(_GSource*, int (*)(void*), void*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:150
        17: g_main_context_dispatch in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4
        18: /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4
        19: g_main_context_iteration in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4
        20: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:394
        21: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventloop.cpp:182
        22: QCoreApplication::exec() in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1486
        23: main in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/main.cpp:17
      
      34,320 (1,320 direct, 33,000 indirect) bytes in 165 blocks are definitely lost in loss record 10,517 of 10,529
        in View::getTexture() in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/compositor.cpp:18
        1: operator new(unsigned long) in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so
        2: QtWayland::SharedMemoryBuffer::toOpenGlTexture(int) in /home/qt/work/qt/qtwayland/src/compositor/wayland_wrapper/qwlclientbuffer.cpp:131
        3: View::getTexture() in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/compositor.cpp:18
        4: Window::paintGL() in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/window.cpp:43
        5: paint in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow_p.h:63
        6: doFlush in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow_p.h:73
        7: handleUpdateEvent in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow_p.h:81
        8: QPaintDeviceWindow::event(QEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow.cpp:163
        9: QCoreApplication::notifyInternal2(QObject*, QEvent*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1142
        10: QPlatformWindow::deliverUpdateRequest() in /home/qt/work/qt/qtbase/src/gui/kernel/qplatformwindow.cpp:792
        11: QPlatformWindow::windowEvent(QEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qplatformwindow.cpp:454
        12: QGuiApplication::notify(QObject*, QEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qguiapplication.cpp:1988
        13: QCoreApplication::notifyInternal2(QObject*, QEvent*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1142
        14: QTimerInfoList::activateTimers() in /home/qt/work/qt/qtbase/src/corelib/kernel/qtimerinfo_unix.cpp:434
        15: timerSourceDispatch(_GSource*, int (*)(void*), void*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:150
        16: g_main_context_dispatch in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4
        17: /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4
        18: g_main_context_iteration in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4
        19: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:394
        20: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventloop.cpp:182
        21: QCoreApplication::exec() in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1486
        22: main in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/main.cpp:17
      
      173,056 (166,400 direct, 6,656 indirect) bytes in 832 blocks are definitely lost in loss record 10,525 of 10,529
        in View::getTexture() in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/compositor.cpp:18
        1: operator new(unsigned long) in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so
        2: QOpenGLTexture::QOpenGLTexture(QOpenGLTexture::Target) in /home/qt/work/qt/qtbase/src/opengl/qopengltexture.cpp:2446
        3: QtWayland::SharedMemoryBuffer::toOpenGlTexture(int) in /home/qt/work/qt/qtwayland/src/compositor/wayland_wrapper/qwlclientbuffer.cpp:131
        4: View::getTexture() in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/compositor.cpp:18
        5: Window::paintGL() in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/window.cpp:43
        6: paint in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow_p.h:63
        7: doFlush in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow_p.h:73
        8: handleUpdateEvent in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow_p.h:81
        9: QPaintDeviceWindow::event(QEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow.cpp:163
        10: QCoreApplication::notifyInternal2(QObject*, QEvent*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1142
        11: QPlatformWindow::deliverUpdateRequest() in /home/qt/work/qt/qtbase/src/gui/kernel/qplatformwindow.cpp:792
        12: QPlatformWindow::windowEvent(QEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qplatformwindow.cpp:454
        13: QGuiApplication::notify(QObject*, QEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qguiapplication.cpp:1988
        14: QCoreApplication::notifyInternal2(QObject*, QEvent*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1142
        15: QTimerInfoList::activateTimers() in /home/qt/work/qt/qtbase/src/corelib/kernel/qtimerinfo_unix.cpp:434
        16: timerSourceDispatch in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:150
        17: idleTimerSourceDispatch(_GSource*, int (*)(void*), void*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:197
        18: g_main_context_dispatch in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4
        19: /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4
        20: g_main_context_iteration in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4
        21: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:394
        22: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventloop.cpp:182
        23: QCoreApplication::exec() in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1486
        24: main in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/main.cpp:17
      
      281,216 (10,816 direct, 270,400 indirect) bytes in 1,352 blocks are definitely lost in loss record 10,528 of 10,529
        in View::getTexture() in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/compositor.cpp:18
        1: operator new(unsigned long) in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so
        2: QtWayland::SharedMemoryBuffer::toOpenGlTexture(int) in /home/qt/work/qt/qtwayland/src/compositor/wayland_wrapper/qwlclientbuffer.cpp:131
        3: View::getTexture() in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/compositor.cpp:18
        4: Window::paintGL() in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/window.cpp:43
        5: paint in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow_p.h:63
        6: doFlush in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow_p.h:73
        7: handleUpdateEvent in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow_p.h:81
        8: QPaintDeviceWindow::event(QEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow.cpp:163
        9: QCoreApplication::notifyInternal2(QObject*, QEvent*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1142
        10: QPlatformWindow::deliverUpdateRequest() in /home/qt/work/qt/qtbase/src/gui/kernel/qplatformwindow.cpp:792
        11: QPlatformWindow::windowEvent(QEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qplatformwindow.cpp:454
        12: QGuiApplication::notify(QObject*, QEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qguiapplication.cpp:1988
        13: QCoreApplication::notifyInternal2(QObject*, QEvent*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1142
        14: QTimerInfoList::activateTimers() in /home/qt/work/qt/qtbase/src/corelib/kernel/qtimerinfo_unix.cpp:434
        15: timerSourceDispatch in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:150
        16: idleTimerSourceDispatch(_GSource*, int (*)(void*), void*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:197
        17: g_main_context_dispatch in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4
        18: /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4
        19: g_main_context_iteration in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4
        20: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:394
        21: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventloop.cpp:182
        22: QCoreApplication::exec() in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1486
        23: main in /home/user/Qt/Examples/Qt-6.7.2/wayland/minimal-cpp/main.cpp:17
      

      Attachments

        For Gerrit Dashboard: QTBUG-128350
        # Subject Branch Project Status CR V

        Activity

          People

            inho Inho Lee
            poikelin Joni Poikelin
            Votes:
            12 Vote for this issue
            Watchers:
            15 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes