Commit 51d793be authored by Max Kellermann's avatar Max Kellermann

output/pulse: simplify _wait_stream()

One large loop and only one pa_stream_get_state() call.
parent 249dcd96
...@@ -682,35 +682,6 @@ pulse_output_close(struct audio_output *ao) ...@@ -682,35 +682,6 @@ pulse_output_close(struct audio_output *ao)
} }
/** /**
* Check if the stream is (already) connected, and waits for a signal
* if not. The mainloop must be locked before calling this function.
*
* @return the current stream state
*/
static pa_stream_state_t
pulse_output_check_stream(struct pulse_output *po)
{
pa_stream_state_t state = pa_stream_get_state(po->stream);
assert(po->mainloop != NULL);
switch (state) {
case PA_STREAM_READY:
case PA_STREAM_FAILED:
case PA_STREAM_TERMINATED:
case PA_STREAM_UNCONNECTED:
break;
case PA_STREAM_CREATING:
pa_threaded_mainloop_wait(po->mainloop);
state = pa_stream_get_state(po->stream);
break;
}
return state;
}
/**
* Check if the stream is (already) connected, and waits if not. The * Check if the stream is (already) connected, and waits if not. The
* mainloop must be locked before calling this function. * mainloop must be locked before calling this function.
* *
...@@ -719,35 +690,25 @@ pulse_output_check_stream(struct pulse_output *po) ...@@ -719,35 +690,25 @@ pulse_output_check_stream(struct pulse_output *po)
static bool static bool
pulse_output_wait_stream(struct pulse_output *po, GError **error_r) pulse_output_wait_stream(struct pulse_output *po, GError **error_r)
{ {
pa_stream_state_t state = pa_stream_get_state(po->stream); while (true) {
switch (pa_stream_get_state(po->stream)) {
switch (state) {
case PA_STREAM_READY: case PA_STREAM_READY:
return true; return true;
case PA_STREAM_FAILED: case PA_STREAM_FAILED:
case PA_STREAM_TERMINATED: case PA_STREAM_TERMINATED:
case PA_STREAM_UNCONNECTED: case PA_STREAM_UNCONNECTED:
g_set_error(error_r, pulse_output_quark(), 0, g_set_error(error_r, pulse_output_quark(),
"disconnected"); pa_context_errno(po->context),
"failed to connect the stream: %s",
pa_strerror(pa_context_errno(po->context)));
return false; return false;
case PA_STREAM_CREATING: case PA_STREAM_CREATING:
pa_threaded_mainloop_wait(po->mainloop);
break; break;
} }
do {
state = pulse_output_check_stream(po);
} while (state == PA_STREAM_CREATING);
if (state != PA_STREAM_READY) {
g_set_error(error_r, pulse_output_quark(), 0,
"failed to connect the stream: %s",
pa_strerror(pa_context_errno(po->context)));
return false;
} }
return true;
} }
/** /**
......
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