node: set master flag

Set the master flag when a node is selected as master.
Recalc graph when a node is destroyed
This commit is contained in:
Wim Taymans 2019-04-11 16:38:11 +02:00
parent 092a0c660d
commit affc641c71

View file

@ -561,6 +561,8 @@ int pw_node_set_driver(struct pw_node *node, struct pw_node *driver)
if (old == driver) if (old == driver)
return 0; return 0;
node->master = node->driver && driver == node;
node->driver_node = driver; node->driver_node = driver;
pw_node_emit_driver_changed(node, old, driver); pw_node_emit_driver_changed(node, old, driver);
@ -834,6 +836,7 @@ struct pw_node *pw_node_new(struct pw_core *core,
this->driver_node = this; this->driver_node = this;
spa_list_append(&this->driver_list, &this->driver_link); spa_list_append(&this->driver_list, &this->driver_link);
this->master = true;
return this; return this;
@ -1035,6 +1038,9 @@ static int node_ready(void *data, int status)
} }
node->rt.activation->running = true; node->rt.activation->running = true;
} }
if (node->driver && !node->master)
return 0;
return resume_node(node, status); return resume_node(node, status);
} }
@ -1161,6 +1167,8 @@ void pw_node_destroy(struct pw_node *node)
pw_global_destroy(node->global); pw_global_destroy(node->global);
} }
pw_core_recalc_graph(node->core);
pw_log_debug("node %p: free", node); pw_log_debug("node %p: free", node);
pw_node_emit_free(node); pw_node_emit_free(node);