stream: don't call suspended callback when disconnecting

This commit is contained in:
Wim Taymans 2020-03-06 18:57:13 +01:00
parent 7f086da39e
commit 091b420b0b

View file

@ -226,9 +226,10 @@ static void stream_state_changed(void *data, enum pw_stream_state old,
enum pw_stream_state state, const char *error) enum pw_stream_state state, const char *error)
{ {
pa_stream *s = data; pa_stream *s = data;
pa_context *c = s->context;
pw_log_debug("stream %p: state '%s'->'%s'", s, pw_stream_state_as_string(old), pw_log_debug("stream %p: state '%s'->'%s' (%d)", s, pw_stream_state_as_string(old),
pw_stream_state_as_string(state)); pw_stream_state_as_string(state), s->state);
if (s->state == PA_STREAM_TERMINATED) if (s->state == PA_STREAM_TERMINATED)
return; return;
@ -239,7 +240,7 @@ static void stream_state_changed(void *data, enum pw_stream_state old,
break; break;
case PW_STREAM_STATE_UNCONNECTED: case PW_STREAM_STATE_UNCONNECTED:
if (!s->disconnecting) { if (!s->disconnecting) {
pa_context_set_error(s->context, PA_ERR_KILLED); pa_context_set_error(c, PA_ERR_KILLED);
pa_stream_set_state(s, PA_STREAM_FAILED); pa_stream_set_state(s, PA_STREAM_FAILED);
} else { } else {
pa_stream_set_state(s, PA_STREAM_TERMINATED); pa_stream_set_state(s, PA_STREAM_TERMINATED);
@ -249,16 +250,16 @@ static void stream_state_changed(void *data, enum pw_stream_state old,
pa_stream_set_state(s, PA_STREAM_CREATING); pa_stream_set_state(s, PA_STREAM_CREATING);
break; break;
case PW_STREAM_STATE_PAUSED: case PW_STREAM_STATE_PAUSED:
if (!s->suspended && s->suspended_callback) { if (!s->suspended && !c->disconnect && s->suspended_callback) {
s->suspended = true;
s->suspended_callback(s, s->suspended_userdata); s->suspended_callback(s, s->suspended_userdata);
} }
s->suspended = true;
break; break;
case PW_STREAM_STATE_STREAMING: case PW_STREAM_STATE_STREAMING:
if (s->suspended && s->suspended_callback) { if (s->suspended && !c->disconnect && s->suspended_callback) {
s->suspended = false;
s->suspended_callback(s, s->suspended_userdata); s->suspended_callback(s, s->suspended_userdata);
} }
s->suspended = false;
configure_device(s); configure_device(s);
configure_buffers(s); configure_buffers(s);
pa_stream_set_state(s, PA_STREAM_READY); pa_stream_set_state(s, PA_STREAM_READY);