fix memory leaks in x_display_fix.h (from Valgrind)

This commit is contained in:
F. Duncanh
2025-11-14 17:34:21 -05:00
parent f8cb14f5f1
commit 47da1e03db
2 changed files with 18 additions and 6 deletions

View File

@@ -670,7 +670,8 @@ static void video_renderer_destroy_instance(video_renderer_t *renderer) {
gst_object_unref(renderer->bus);
gst_object_unref(renderer->pipeline);
#ifdef X_DISPLAY_FIX
if (renderer->gst_window) {
if (renderer->gst_window){
free_X11_Display(renderer->gst_window);
free(renderer->gst_window);
renderer->gst_window = NULL;
}

View File

@@ -48,15 +48,23 @@ static void get_X11_Display(X11_Window_t * X11, char *display_name) {
X11->window = (Window) NULL;
}
static int free_X11_Display(X11_Window_t *X11) {
XCloseDisplay(X11->display);
}
static Window enum_windows(const char * str, Display * display, Window window, int depth) {
int i;
XTextProperty text;
XGetWMName(display, window, &text);
char* name = NULL;
XFetchName(display, window, &name);
if (name != 0 && strcmp(str, name) == 0) {
if (name) {
if (strcmp(str, name) == 0) {
XFree(name);
return window;
}
XFree(name);
}
Window _root, parent;
Window* children = NULL;
unsigned int n;
@@ -64,7 +72,10 @@ static Window enum_windows(const char * str, Display * display, Window window, i
if (children != NULL) {
for (i = 0; i < n; i++) {
Window w = enum_windows(str, display, children[i], depth + 1);
if (w) return w;
if (w) {
XFree(children);
return w;
}
}
XFree(children);
}