[vlc-devel] commit: Fix very minor memory leak when using OSS for audio. ( Richard Hosking )

git version control git at videolan.org
Sat Mar 15 15:53:01 CET 2008


vlc | branch: master | Richard Hosking <richard at hovis.net> | Sat Mar 15 14:50:27 2008 +0000| [7d3cc85d1bc8a3d7aea4f5486148826304b0aa8b]

Fix very minor memory leak when using OSS for audio.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7d3cc85d1bc8a3d7aea4f5486148826304b0aa8b
---

 modules/access/v4l2/v4l2.c |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/modules/access/v4l2/v4l2.c b/modules/access/v4l2/v4l2.c
index 4762a1b..9b94a7e 100644
--- a/modules/access/v4l2/v4l2.c
+++ b/modules/access/v4l2/v4l2.c
@@ -2451,13 +2451,12 @@ static int OpenAudioDevAlsa( vlc_object_t *p_this, demux_sys_t *p_sys,
 static int OpenAudioDevOss( vlc_object_t *p_this, demux_sys_t *p_sys,
                             vlc_bool_t b_demux )
 {
-    char *psz_device = p_sys->psz_adev;
     int i_fd = 0;
     int i_format;
     /* OSS */
-    if( !psz_device ) psz_device = strdup( OSS_DEFAULT ); /* FIXME leak */
+    char* psz_oss_device_name = strdup( ( !p_sys->psz_adev ) ? OSS_DEFAULT : p_sys->psz_adev );
 
-    if( (i_fd = open( psz_device, O_RDONLY | O_NONBLOCK )) < 0 )
+    if( (i_fd = open( psz_oss_device_name, O_RDONLY | O_NONBLOCK )) < 0 )
     {
         msg_Err( p_this, "cannot open OSS audio device (%m)" );
         goto adev_fail;
@@ -2490,10 +2489,12 @@ static int OpenAudioDevOss( vlc_object_t *p_this, demux_sys_t *p_sys,
 
     if( !p_sys->psz_adev )
         p_sys->psz_adev = strdup( OSS_DEFAULT );
+    free( psz_oss_device_name );
     return i_fd;
 
  adev_fail:
 
+    free( psz_oss_device_name );
     if( i_fd >= 0 ) close( i_fd );
     return -1;
 
@@ -2893,11 +2894,11 @@ static vlc_bool_t ProbeAudioDevOss( vlc_object_t *p_this, demux_sys_t *p_sys,
 {
     int i_fd = 0;
     int i_caps;
-    if( !psz_device ) psz_device = strdup( OSS_DEFAULT ); /* FIXME leak */
+    char* psz_oss_device_name = strdup( ( !psz_device ) ? OSS_DEFAULT : psz_device );
 
-    if( ( i_fd = open( psz_device, O_RDONLY | O_NONBLOCK ) ) < 0 )
+    if( ( i_fd = open( psz_oss_device_name, O_RDONLY | O_NONBLOCK ) ) < 0 )
     {
-        msg_Err( p_this, "cannot open device %s for OSS audio (%m)", psz_device );
+        msg_Err( p_this, "cannot open device %s for OSS audio (%m)", psz_oss_device_name );
         goto open_failed;
     }
 
@@ -2908,11 +2909,13 @@ static vlc_bool_t ProbeAudioDevOss( vlc_object_t *p_this, demux_sys_t *p_sys,
         goto open_failed;
     }
 
+    free( psz_oss_device_name );
     if( i_fd >= 0 ) close( i_fd );
 
     return VLC_TRUE;
 
 open_failed:
+    free( psz_oss_device_name );
     if( i_fd >= 0 ) close( i_fd );
     return VLC_FALSE;
 }




More information about the vlc-devel mailing list