Commit 9ddb2cef authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

PulseAudio: fix locking when changing device

parent 00deb25e
...@@ -50,8 +50,8 @@ vlc_module_end () ...@@ -50,8 +50,8 @@ vlc_module_end ()
/* NOTE: /* NOTE:
* Be careful what you do when the PulseAudio mainloop is held, which is to say * Be careful what you do when the PulseAudio mainloop is held, which is to say
* within PulseAudio callbacks, or after pa_threaded_mainloop_lock(). * within PulseAudio callbacks, or after pa_threaded_mainloop_lock().
* In particular, the VLC audio output object variables can be manipulated with * In particular, a VLC variable callback cannot be triggered nor deleted with
* the PulseAudio mainloop lock held, but not vice versa! */ * the PulseAudio mainloop lock held, if the callback acquires the lock. */
struct aout_sys_t struct aout_sys_t
{ {
...@@ -354,16 +354,19 @@ static int StreamMove(vlc_object_t *obj, const char *varname, vlc_value_t old, ...@@ -354,16 +354,19 @@ static int StreamMove(vlc_object_t *obj, const char *varname, vlc_value_t old,
uint32_t idx = pa_stream_get_index(s); uint32_t idx = pa_stream_get_index(s);
uint32_t sink_idx = val.i_int; uint32_t sink_idx = val.i_int;
(void) varname; (void) old;
pa_threaded_mainloop_lock(sys->mainloop);
op = pa_context_move_sink_input_by_index(sys->context, idx, sink_idx, op = pa_context_move_sink_input_by_index(sys->context, idx, sink_idx,
NULL, NULL); NULL, NULL);
if (unlikely(op == NULL)) { if (likely(op != NULL)) {
error(aout, "cannot move sink", sys->context);
return VLC_EGENERIC;
}
pa_operation_unref(op); pa_operation_unref(op);
msg_Dbg(aout, "moving to sink %"PRIu32, sink_idx); msg_Dbg(aout, "moving to sink %"PRIu32, sink_idx);
(void) varname; (void) old; } else
return VLC_SUCCESS; error(aout, "cannot move sink", sys->context);
pa_threaded_mainloop_unlock(sys->mainloop);
return (op != NULL) ? VLC_SUCCESS : VLC_EGENERIC;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment