From 7b7a390bfcbf6418d5ec3145bc8788e35b4229c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= <remi@remlab.net> Date: Mon, 19 Oct 2009 20:27:38 +0300 Subject: [PATCH] XCB-XV: fix memleak when port grabbing fails --- modules/video_output/xcb/xvideo.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/modules/video_output/xcb/xvideo.c b/modules/video_output/xcb/xvideo.c index 600d9057bb03..2978d43defc3 100644 --- a/modules/video_output/xcb/xvideo.c +++ b/modules/video_output/xcb/xvideo.c @@ -335,7 +335,7 @@ static int Open (vlc_object_t *obj) xcb_xv_adaptor_info_iterator_t it; for (it = xcb_xv_query_adaptors_info_iterator (adaptors); - it.rem > 0; + it.rem > 0 && !found_adaptor; xcb_xv_adaptor_info_next (&it)) { const xcb_xv_adaptor_info_t *a = it.data; @@ -380,10 +380,7 @@ static int Open (vlc_object_t *obj) } if (xfmt == NULL) /* No acceptable image formats */ - { - free (r); - continue; - } + goto skip_adaptor; /* Grab a port */ for (unsigned i = 0; i < a->num_ports; i++) @@ -398,13 +395,15 @@ static int Open (vlc_object_t *obj) if (result == 0) { p_sys->port = port; - goto grabbed_port; + found_adaptor = true; + break; } msg_Dbg (vd, "cannot grab port %"PRIu32, port); } - continue; + if (!found_adaptor) + goto skip_adaptor; - grabbed_port: + /* Found port - initialize selected format */ name = strndup (xcb_xv_adaptor_info_name (a), a->name_size); if (name != NULL) { @@ -422,9 +421,9 @@ static int Open (vlc_object_t *obj) fmt.i_gmask = xfmt->green_mask; fmt.i_bmask = xfmt->blue_mask; } + + skip_adaptor: free (r); - found_adaptor = true; - break; } free (adaptors); if (!found_adaptor) -- GitLab