Fixed bug 2502 - Memory leak inside SDL_x11events.c -> X11_DispatchEvent(_THIS) bojko_1000 Code @566: if (data->xwindow) { Atom _net_frame_extents = X11_XInternAtom(display, "_NET_FRAME_EXTENTS", 0); Atom type = None; int format; unsigned long nitems = 0, bytes_after; unsigned char *property; X11_XGetWindowProperty(display, data->xwindow, _net_frame_extents, 0, 16, 0, XA_CARDINAL, &type, &format, &nitems, &bytes_after, &property); if (type != None && nitems == 4) { border_left = ((long*)property)[0]; border_right = ((long*)property)[1]; border_top = ((long*)property)[2]; border_bottom = ((long*)property)[3]; } } Code after _the fix_: if (data->xwindow) { Atom _net_frame_extents = X11_XInternAtom(display, "_NET_FRAME_EXTENTS", 0); Atom type = None; int format; unsigned long nitems = 0, bytes_after; unsigned char *property; X11_XGetWindowProperty(display, data->xwindow, _net_frame_extents, 0, 16, 0, XA_CARDINAL, &type, &format, &nitems, &bytes_after, &property); if (type != None && nitems == 4) { border_left = ((long*)property)[0]; border_right = ((long*)property)[1]; border_top = ((long*)property)[2]; border_bottom = ((long*)property)[3]; } X11_XFree(property); } I have found that leak with valgrind.
diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c
index e6fe9c4..50e7394 100644
--- a/src/video/x11/SDL_x11events.c
+++ b/src/video/x11/SDL_x11events.c
@@ -563,19 +563,20 @@ X11_DispatchEvent(_THIS)
long border_top = 0;
if (data->xwindow) {
Atom _net_frame_extents = X11_XInternAtom(display, "_NET_FRAME_EXTENTS", 0);
- Atom type = None;
+ Atom type;
int format;
- unsigned long nitems = 0, bytes_after;
+ unsigned long nitems, bytes_after;
unsigned char *property;
- X11_XGetWindowProperty(display, data->xwindow,
- _net_frame_extents, 0, 16, 0,
- XA_CARDINAL, &type, &format,
- &nitems, &bytes_after, &property);
-
- if (type != None && nitems == 4)
- {
- border_left = ((long*)property)[0];
- border_top = ((long*)property)[2];
+ if (X11_XGetWindowProperty(display, data->xwindow,
+ _net_frame_extents, 0, 16, 0,
+ XA_CARDINAL, &type, &format,
+ &nitems, &bytes_after, &property) == Success) {
+ if (type != None && nitems == 4)
+ {
+ border_left = ((long*)property)[0];
+ border_top = ((long*)property)[2];
+ }
+ X11_XFree(property);
}
}