Details
-
Bug
-
Resolution: Fixed
-
P2: Important
-
5.15.17, 6.7.2
-
-
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