]> git.sesse.net Git - vlc/commitdiff
* modules/audio_output/alsa.c: fixed minor memory leak.
authorGildas Bazin <gbazin@videolan.org>
Sun, 4 Dec 2005 19:35:35 +0000 (19:35 +0000)
committerGildas Bazin <gbazin@videolan.org>
Sun, 4 Dec 2005 19:35:35 +0000 (19:35 +0000)
modules/audio_output/alsa.c

index 4ebcdf3f0712acd35b9031088890d29f85ec8ba3..f4b554f7762cdba0386bc17e8cc4b71f3820f35b 100644 (file)
@@ -315,7 +315,6 @@ static int Open( vlc_object_t *p_this )
     }
     p_sys->b_playing = VLC_FALSE;
     p_sys->start_date = 0;
-    p_sys->p_status = (snd_pcm_status_t *)malloc(snd_pcm_status_sizeof());
     vlc_cond_init( p_aout, &p_sys->wait );
     vlc_mutex_init( p_aout, &p_sys->lock );
 
@@ -327,6 +326,8 @@ static int Open( vlc_object_t *p_this )
         return VLC_EGENERIC;
     }
 
+    p_sys->p_status = (snd_pcm_status_t *)malloc(snd_pcm_status_sizeof());
+
     /* Choose the IEC device for S/PDIF output:
        if the device is overriden by the user then it will be the one
        otherwise we compute the default device based on the output format. */
@@ -375,6 +376,7 @@ static int Open( vlc_object_t *p_this )
 
     if ( var_Get( p_aout, "audio-device", &val ) < 0 )
     {
+        free( p_sys->p_status );
         free( p_sys );
         free( psz_device );
         return VLC_EGENERIC;
@@ -411,6 +413,7 @@ static int Open( vlc_object_t *p_this )
     {
         /* This should not happen ! */
         msg_Err( p_aout, "internal: can't find audio-device (%i)", val.i_int );
+        free( p_sys->p_status );
         free( p_sys );
         free( psz_device );
         return VLC_EGENERIC;
@@ -428,6 +431,7 @@ static int Open( vlc_object_t *p_this )
         {
             msg_Err( p_aout, "cannot open ALSA device `%s' (%s)",
                              psz_iec_device, snd_strerror( i_snd_rc ) );
+            free( p_sys->p_status );
             free( p_sys );
             free( psz_device );
             return VLC_EGENERIC;
@@ -470,6 +474,7 @@ static int Open( vlc_object_t *p_this )
         {
             msg_Err( p_aout, "cannot open ALSA device `%s' (%s)",
                              psz_device, snd_strerror( i_snd_rc ) );
+            free( p_sys->p_status );
             free( p_sys );
             free( psz_device );
             return VLC_EGENERIC;
@@ -673,6 +678,7 @@ error:
 #ifdef ALSA_DEBUG
     snd_output_close( p_sys->p_snd_stderr );
 #endif
+    free( p_sys->p_status );
     free( p_sys );
     return VLC_EGENERIC;
 }