summaryrefslogtreecommitdiff
path: root/dev-qt/qtwebengine/files
diff options
context:
space:
mode:
Diffstat (limited to 'dev-qt/qtwebengine/files')
-rw-r--r--dev-qt/qtwebengine/files/qtwebengine-6.9.0-x11-pixmap-leak.patch43
1 files changed, 43 insertions, 0 deletions
diff --git a/dev-qt/qtwebengine/files/qtwebengine-6.9.0-x11-pixmap-leak.patch b/dev-qt/qtwebengine/files/qtwebengine-6.9.0-x11-pixmap-leak.patch
new file mode 100644
index 000000000000..17071b0c7354
--- /dev/null
+++ b/dev-qt/qtwebengine/files/qtwebengine-6.9.0-x11-pixmap-leak.patch
@@ -0,0 +1,43 @@
+Patch status: fixed in Qt 6.9.1
+
+https://bugreports.qt.io/browse/QTBUG-135047
+https://codereview.qt-project.org/c/qt/qtwebengine/+/634033
+--- a/src/core/compositor/native_skia_output_device_opengl.cpp
++++ b/src/core/compositor/native_skia_output_device_opengl.cpp
+@@ -214,9 +214,10 @@
+ glFun->glBindTexture(GL_TEXTURE_2D, 0);
+
+- m_frontBuffer->textureCleanupCallback = [glFun, glxFun, display, glxPixmap,
+- glTexture]() {
++ m_frontBuffer->textureCleanupCallback = [glFun, glxFun, display, glxPixmap, glTexture,
++ glxHelper, pixmapId]() {
+ glxFun->glXReleaseTexImageEXT(display, glxPixmap, GLX_FRONT_LEFT_EXT);
+ glFun->glDeleteTextures(1, &glTexture);
+ glXDestroyGLXPixmap(display, glxPixmap);
++ glxHelper->freePixmap(pixmapId);
+ };
+ }
+--- a/src/core/ozone/glx_helper.cpp
++++ b/src/core/ozone/glx_helper.cpp
+@@ -101,3 +101,13 @@
+ }
+
++void GLXHelper::freePixmap(uint32_t pixmapId) const
++{
++ xcb_void_cookie_t cookie = xcb_free_pixmap_checked(m_connection, pixmapId);
++ xcb_generic_error_t *error = xcb_request_check(m_connection, cookie);
++ if (error) {
++ qWarning("GLX: XCB_FREE_PIXMAP failed with error code: 0x%x", error->error_code);
++ free(error);
++ }
++}
++
+ QT_END_NAMESPACE
+--- a/src/core/ozone/glx_helper.h
++++ b/src/core/ozone/glx_helper.h
+@@ -34,4 +34,5 @@
+ GLXPixmap importBufferAsPixmap(int dmaBufFd, uint32_t size, uint16_t width, uint16_t height,
+ uint16_t stride) const;
++ void freePixmap(uint32_t pixmapId) const;
+ bool isDmaBufSupported() const { return m_isDmaBufSupported; }
+