1
mirror of https://code.videolan.org/videolan/vlc synced 2024-09-04 09:11:33 +02:00

XCB-XV: fix memleak when port grabbing fails

This commit is contained in:
Rémi Denis-Courmont 2009-10-19 20:27:38 +03:00
parent 8b65aa8a59
commit 7b7a390bfc

View File

@ -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)