diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-07-18 10:45:43 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-07-18 10:45:43 +0200 |
commit | 2b2fd56ca5512542edecccf6bcefb9cfd12ceb09 (patch) | |
tree | de477751c3010430fc110443c1834f569c9294eb | |
parent | 287521c2c2f564f6ea130166e7df601a47a28cd1 (diff) | |
parent | 3636d9dafc4c4a9b80a94382a235172c80a083e8 (diff) | |
download | redot-engine-2b2fd56ca5512542edecccf6bcefb9cfd12ceb09.tar.gz |
Merge pull request #94473 from nvlled/fix-screen-image-memory-leak
Linux/X11: Fix memory leak from created screen images
-rw-r--r-- | platform/linuxbsd/x11/display_server_x11.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/platform/linuxbsd/x11/display_server_x11.cpp b/platform/linuxbsd/x11/display_server_x11.cpp index edf3a40ccb..d6eb101a68 100644 --- a/platform/linuxbsd/x11/display_server_x11.cpp +++ b/platform/linuxbsd/x11/display_server_x11.cpp @@ -1519,7 +1519,7 @@ Color DisplayServerX11::screen_get_pixel(const Point2i &p_position) const { if (image) { XColor c; c.pixel = XGetPixel(image, 0, 0); - XFree(image); + XDestroyImage(image); XQueryColor(x11_display, XDefaultColormap(x11_display, i), &c); color = Color(float(c.red) / 65535.0, float(c.green) / 65535.0, float(c.blue) / 65535.0, 1.0); break; @@ -1637,11 +1637,12 @@ Ref<Image> DisplayServerX11::screen_get_image(int p_screen) const { } } } else { - XFree(image); - ERR_FAIL_V_MSG(Ref<Image>(), vformat("XImage with RGB mask %x %x %x and depth %d is not supported.", (uint64_t)image->red_mask, (uint64_t)image->green_mask, (uint64_t)image->blue_mask, (int64_t)image->bits_per_pixel)); + String msg = vformat("XImage with RGB mask %x %x %x and depth %d is not supported.", (uint64_t)image->red_mask, (uint64_t)image->green_mask, (uint64_t)image->blue_mask, (int64_t)image->bits_per_pixel); + XDestroyImage(image); + ERR_FAIL_V_MSG(Ref<Image>(), msg); } img = Image::create_from_data(width, height, false, Image::FORMAT_RGBA8, img_data); - XFree(image); + XDestroyImage(image); } return img; |