[vlc-commits] PulseAudio: missing lock

Rémi Denis-Courmont git at videolan.org
Thu Aug 11 16:26:25 CEST 2011


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Thu Aug 11 16:35:12 2011 +0300| [c72c363f0344ac9bfb280fd4c48299c862561eff] | committer: Rémi Denis-Courmont

PulseAudio: missing lock

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

 modules/audio_output/pulse.c |   14 ++++++++------
 src/pulse/mainloop.c         |    2 ++
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/modules/audio_output/pulse.c b/modules/audio_output/pulse.c
index 24c7193..f1af097 100644
--- a/modules/audio_output/pulse.c
+++ b/modules/audio_output/pulse.c
@@ -823,18 +823,20 @@ static void Close (vlc_object_t *obj)
         var_DelCallback (aout, "audio-device", StreamMove, s);
         var_Destroy (aout, "audio-device");
 
+        vlc_pa_lock ();
         pa_stream_disconnect(s);
 
         /* Clear all callbacks */
         pa_stream_set_state_callback(s, NULL, NULL);
-        pa_stream_set_latency_update_callback(s, NULL, aout);
-        pa_stream_set_moved_callback(s, NULL, aout);
-        pa_stream_set_overflow_callback(s, NULL, aout);
-        pa_stream_set_started_callback(s, NULL, aout);
-        pa_stream_set_suspended_callback(s, NULL, aout);
-        pa_stream_set_underflow_callback(s, NULL, aout);
+        pa_stream_set_latency_update_callback(s, NULL, NULL);
+        pa_stream_set_moved_callback(s, NULL, NULL);
+        pa_stream_set_overflow_callback(s, NULL, NULL);
+        pa_stream_set_started_callback(s, NULL, NULL);
+        pa_stream_set_suspended_callback(s, NULL, NULL);
+        pa_stream_set_underflow_callback(s, NULL, NULL);
 
         pa_stream_unref(s);
+        vlc_pa_unlock ();
     }
 
     vlc_pa_disconnect(obj, ctx);
diff --git a/src/pulse/mainloop.c b/src/pulse/mainloop.c
index f1d1d77..8ed7bb5 100644
--- a/src/pulse/mainloop.c
+++ b/src/pulse/mainloop.c
@@ -262,9 +262,11 @@ void vlc_pa_disconnect (vlc_object_t *obj, pa_context *ctx)
 {
     pa_threaded_mainloop *mainloop = vlc_pa_mainloop;
 
+    vlc_pa_lock ();
     pa_context_disconnect (ctx);
     pa_context_set_state_callback (ctx, NULL, NULL);
     pa_context_unref (ctx);
+    vlc_pa_unlock ();
 
     vlc_pa_mainloop_deinit (mainloop);
     (void) obj;



More information about the vlc-commits mailing list