From 6494a5aac0ba8b6deaa5a86b2f0b28066c4a6e81 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 2 Jul 2018 13:14:01 +0200 Subject: [PATCH] link: improve state change Don't assume running state when we already have a format --- src/pipewire/link.c | 11 ++++------- src/pipewire/node.c | 9 ++++++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/pipewire/link.c b/src/pipewire/link.c index e3695fc93..04ea3e6b3 100644 --- a/src/pipewire/link.c +++ b/src/pipewire/link.c @@ -81,12 +81,11 @@ static void pw_link_update_state(struct pw_link *link, enum pw_link_state state, spa_hook_list_call(&link->listener_list, struct pw_link_events, state_changed, old, state, error); + pw_log_debug("link %p: %d %d %d %d", link, + out->n_ready_output_links, out->n_used_output_links, + in->n_ready_input_links, in->n_used_input_links); + if (old != PW_LINK_STATE_PAUSED && state == PW_LINK_STATE_PAUSED) { - - pw_log_debug("link %p: %d %d %d %d", link, - out->n_ready_output_links, out->n_used_output_links, - in->n_ready_input_links, in->n_used_input_links); - if (++out->n_ready_output_links == out->n_used_output_links) pw_node_set_state(out, PW_NODE_STATE_RUNNING); if (++in->n_ready_input_links == in->n_used_input_links) @@ -173,7 +172,6 @@ static int do_negotiate(struct pw_link *this, uint32_t in_state, uint32_t out_st } else { pw_log_debug("link %p: format was already set", this); - pw_node_update_state(output->node, PW_NODE_STATE_RUNNING, NULL); changed = false; } } @@ -194,7 +192,6 @@ static int do_negotiate(struct pw_link *this, uint32_t in_state, uint32_t out_st } else { pw_log_debug("link %p: format was already set", this); - pw_node_update_state(input->node, PW_NODE_STATE_RUNNING, NULL); changed = false; } } diff --git a/src/pipewire/node.c b/src/pipewire/node.c index 2761cc95f..a50abeff4 100644 --- a/src/pipewire/node.c +++ b/src/pipewire/node.c @@ -1023,14 +1023,17 @@ int pw_node_set_state(struct pw_node *node, enum pw_node_state state) { int res = 0; struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this); + enum pw_node_state old = node->info.state; - if (node->info.state == state) + pw_log_debug("node %p: set state %s -> %s", node, + pw_node_state_as_string(old), + pw_node_state_as_string(state)); + + if (old == state) return 0; spa_hook_list_call(&node->listener_list, struct pw_node_events, state_request, state); - pw_log_debug("node %p: set state %s", node, pw_node_state_as_string(state)); - switch (state) { case PW_NODE_STATE_CREATING: return -EIO;