link: only start node when all links are ready

This commit is contained in:
Wim Taymans 2018-11-16 16:45:40 +01:00
parent c9f7439b52
commit a096e6d9c9
2 changed files with 12 additions and 3 deletions

View file

@ -128,9 +128,11 @@ static void pw_link_update_state(struct pw_link *link, enum pw_link_state state,
debug_link(link);
if (old != PW_LINK_STATE_PAUSED && state == PW_LINK_STATE_PAUSED) {
if (++out->n_ready_output_links == out->n_used_output_links)
if (++out->n_ready_output_links == out->n_used_output_links &&
out->n_ready_input_links == out->n_used_input_links)
pw_node_set_state(out, PW_NODE_STATE_RUNNING);
if (++in->n_ready_input_links == in->n_used_input_links)
if (++in->n_ready_input_links == in->n_used_input_links &&
in->n_ready_output_links == in->n_used_output_links)
pw_node_set_state(in, PW_NODE_STATE_RUNNING);
pw_link_activate(link);
}

View file

@ -142,7 +142,14 @@ static int start_node(struct pw_node *this)
if (this->info.state >= PW_NODE_STATE_RUNNING)
return 0;
pw_log_debug("node %p: start node", this);
pw_log_debug("node %p: start node %d %d %d %d", this, this->n_ready_output_links,
this->n_used_output_links, this->n_ready_input_links,
this->n_used_input_links);
if (this->n_ready_output_links != this->n_used_output_links ||
this->n_ready_input_links != this->n_used_input_links)
return 0;
res = spa_node_send_command(this->node,
&SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_Start));
if (res < 0)