mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
core: handle slave_list in set_driver only
When destroying a node, move all slaved nodes to their own driver.
This commit is contained in:
parent
af1b012a70
commit
1612ed793e
2 changed files with 8 additions and 2 deletions
|
|
@ -1058,8 +1058,6 @@ static int collect_nodes(struct pw_node *driver)
|
||||||
|
|
||||||
spa_list_consume(n, &queue, sort_link) {
|
spa_list_consume(n, &queue, sort_link) {
|
||||||
spa_list_remove(&n->sort_link);
|
spa_list_remove(&n->sort_link);
|
||||||
spa_list_append(&driver->slave_list, &n->slave_link);
|
|
||||||
|
|
||||||
pw_node_set_driver(n, driver);
|
pw_node_set_driver(n, driver);
|
||||||
|
|
||||||
if (n->quantum_size > 0 && n->quantum_size < quantum)
|
if (n->quantum_size > 0 && n->quantum_size < quantum)
|
||||||
|
|
|
||||||
|
|
@ -620,7 +620,10 @@ int pw_node_set_driver(struct pw_node *node, struct pw_node *driver)
|
||||||
node->master = node->driver && driver == node;
|
node->master = node->driver && driver == node;
|
||||||
pw_log_info("node %p: driver %p master:%u", node, driver, node->master);
|
pw_log_info("node %p: driver %p master:%u", node, driver, node->master);
|
||||||
|
|
||||||
|
spa_list_remove(&node->slave_link);
|
||||||
node->driver_node = driver;
|
node->driver_node = driver;
|
||||||
|
spa_list_append(&driver->slave_list, &node->slave_link);
|
||||||
|
|
||||||
pw_node_emit_driver_changed(node, old, driver);
|
pw_node_emit_driver_changed(node, old, driver);
|
||||||
|
|
||||||
if ((res = spa_node_set_io(node->node,
|
if ((res = spa_node_set_io(node->node,
|
||||||
|
|
@ -1218,6 +1221,11 @@ void pw_node_destroy(struct pw_node *node)
|
||||||
/* remove ourself as a slave from the driver node */
|
/* remove ourself as a slave from the driver node */
|
||||||
spa_list_remove(&node->slave_link);
|
spa_list_remove(&node->slave_link);
|
||||||
|
|
||||||
|
spa_list_consume(slave, &node->slave_list, slave_link) {
|
||||||
|
pw_log_debug("node %p: reslave %p", impl, slave);
|
||||||
|
pw_node_set_driver(slave, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
if (node->registered) {
|
if (node->registered) {
|
||||||
spa_list_remove(&node->link);
|
spa_list_remove(&node->link);
|
||||||
if (node->driver)
|
if (node->driver)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue