]> git.sesse.net Git - vlc/commitdiff
directsound: fix uninitialized mutex and condition variable
authorRémi Denis-Courmont <remi@remlab.net>
Wed, 12 Nov 2014 20:10:36 +0000 (22:10 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Wed, 12 Nov 2014 20:11:33 +0000 (22:11 +0200)
Regression from 3044105e9d4664609a7d749469fe0fd6d85e90ff.

modules/audio_output/directsound.c

index 7db4458383ed0abafbae95e61fd2586f5058e662..db870f2a62407cc392869d167390656b6ff9f573 100644 (file)
@@ -548,9 +548,12 @@ static HRESULT Stop( aout_stream_sys_t *p_sys )
     vlc_mutex_lock( &p_sys->lock );
     p_sys->b_playing =  true;
     vlc_cond_signal( &p_sys->cond );
-    vlc_cancel( p_sys->eraser_thread );
     vlc_mutex_unlock( &p_sys->lock );
+    vlc_cancel( p_sys->eraser_thread );
     vlc_join( p_sys->eraser_thread, NULL );
+    vlc_cond_destroy( &p_sys->cond );
+    vlc_mutex_destroy( &p_sys->lock );
+
     if( p_sys->p_notify != NULL )
     {
         IDirectSoundNotify_Release(p_sys->p_notify );
@@ -767,12 +770,19 @@ static HRESULT Start( vlc_object_t *obj, aout_stream_sys_t *sys,
         }
     }
 
+    vlc_mutex_init(&sys->lock);
+    vlc_cond_init(&sys->cond);
+
     int ret = vlc_clone(&sys->eraser_thread, PlayedDataEraser, (void*) obj,
                         VLC_THREAD_PRIORITY_LOW);
     if( unlikely( ret ) )
     {
         if( ret != ENOMEM )
             msg_Err( obj, "Couldn't start eraser thread" );
+
+        vlc_cond_destroy(&sys->cond);
+        vlc_mutex_destroy(&sys->lock);
+
         if( sys->p_notify != NULL )
         {
             IDirectSoundNotify_Release( sys->p_notify );
@@ -1087,9 +1097,6 @@ static int Open(vlc_object_t *obj)
     aout_DeviceReport(aout, dev);
     free(dev);
 
-    vlc_mutex_init(&sys->s.lock);
-    vlc_cond_init(&sys->s.cond);
-
     return VLC_SUCCESS;
 }
 
@@ -1097,8 +1104,6 @@ static void Close(vlc_object_t *obj)
 {
     audio_output_t *aout = (audio_output_t *)obj;
     aout_sys_t *sys = aout->sys;
-    vlc_cond_destroy( &sys->s.cond );
-    vlc_mutex_destroy( &sys->s.lock );
 
     var_Destroy(aout, "directx-audio-device");
     FreeLibrary(sys->hdsound_dll); /* free DSOUND.DLL */