[vlc-commits] xcb: fix some memory leaks
Edward Wang
git at videolan.org
Tue Jul 2 18:27:20 CEST 2013
vlc/vlc-2.1 | branch: master | Edward Wang <edward.c.wang at compdigitec.com> | Mon Jun 24 19:56:45 2013 -0400| [df525d3725f7186feb50adf8a00c8adb74e408c1] | committer: Jean-Baptiste Kempf
xcb: fix some memory leaks
According to xcb docs, we are responsible for freeing this memory.
Signed-off-by: Rafaël Carré <funman at videolan.org>
(cherry picked from commit 06005e87c76e739b1dd8a8003696571c184cf133)
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.1.git/?a=commit;h=df525d3725f7186feb50adf8a00c8adb74e408c1
---
modules/control/globalhotkeys/xcb.c | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/modules/control/globalhotkeys/xcb.c b/modules/control/globalhotkeys/xcb.c
index f35ce67..05e5a05 100644
--- a/modules/control/globalhotkeys/xcb.c
+++ b/modules/control/globalhotkeys/xcb.c
@@ -181,10 +181,17 @@ static unsigned GetModifier( xcb_connection_t *p_connection, xcb_key_symbols_t *
if( sym == 0 )
return 0; /* no modifier */
- const xcb_keycode_t *p_keys = xcb_key_symbols_get_keycode( p_symbols, sym );
- if( !p_keys )
+ xcb_get_modifier_mapping_cookie_t r =
+ xcb_get_modifier_mapping( p_connection );
+ xcb_get_modifier_mapping_reply_t *p_map =
+ xcb_get_modifier_mapping_reply( p_connection, r, NULL );
+ if( !p_map )
return 0;
+ xcb_keycode_t *p_keys = xcb_key_symbols_get_keycode( p_symbols, sym );
+ if( !p_keys )
+ goto end;
+
int i = 0;
bool no_modifier = true;
while( p_keys[i] != XCB_NO_SYMBOL )
@@ -198,28 +205,24 @@ static unsigned GetModifier( xcb_connection_t *p_connection, xcb_key_symbols_t *
}
if( no_modifier )
- return 0;
-
- xcb_get_modifier_mapping_cookie_t r =
- xcb_get_modifier_mapping( p_connection );
- xcb_get_modifier_mapping_reply_t *p_map =
- xcb_get_modifier_mapping_reply( p_connection, r, NULL );
- if( !p_map )
- return 0;
+ goto end;
xcb_keycode_t *p_keycode = xcb_get_modifier_mapping_keycodes( p_map );
if( !p_keycode )
- return 0;
+ goto end;
for( int i = 0; i < 8; i++ )
for( int j = 0; j < p_map->keycodes_per_modifier; j++ )
for( int k = 0; p_keys[k] != XCB_NO_SYMBOL; k++ )
if( p_keycode[i*p_map->keycodes_per_modifier + j] == p_keys[k])
{
+ free( p_keys );
free( p_map );
return pi_mask[i];
}
+end:
+ free( p_keys );
free( p_map ); // FIXME to check
return 0;
}
More information about the vlc-commits
mailing list