impl-node: don't do IPC from data-loop

This commit is contained in:
Wim Taymans 2022-12-07 21:18:33 +01:00
parent 97f95f51c5
commit 19964963d3

View file

@ -809,17 +809,9 @@ do_move_nodes(struct spa_loop *loop,
struct impl *impl = user_data; struct impl *impl = user_data;
struct pw_impl_node *driver = *(struct pw_impl_node **)data; struct pw_impl_node *driver = *(struct pw_impl_node **)data;
struct pw_impl_node *node = &impl->this; struct pw_impl_node *node = &impl->this;
int res;
pw_log_trace("%p: driver:%p->%p", node, node->driver_node, driver); pw_log_trace("%p: driver:%p->%p", node, node->driver_node, driver);
if ((res = spa_node_set_io(node->node,
SPA_IO_Position,
&driver->rt.activation->position,
sizeof(struct spa_io_position))) < 0) {
pw_log_debug("%p: set position: %s", node, spa_strerror(res));
}
pw_log_trace("%p: set position %p", node, &driver->rt.activation->position); pw_log_trace("%p: set position %p", node, &driver->rt.activation->position);
node->rt.position = &driver->rt.activation->position; node->rt.position = &driver->rt.activation->position;
@ -845,6 +837,7 @@ int pw_impl_node_set_driver(struct pw_impl_node *node, struct pw_impl_node *driv
{ {
struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this); struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this);
struct pw_impl_node *old = node->driver_node; struct pw_impl_node *old = node->driver_node;
int res;
if (driver == NULL) if (driver == NULL)
driver = node; driver = node;
@ -878,6 +871,13 @@ int pw_impl_node_set_driver(struct pw_impl_node *node, struct pw_impl_node *driv
node->driver_node = driver; node->driver_node = driver;
node->moved = true; node->moved = true;
if ((res = spa_node_set_io(node->node,
SPA_IO_Position,
&driver->rt.activation->position,
sizeof(struct spa_io_position))) < 0) {
pw_log_debug("%p: set position: %s", node, spa_strerror(res));
}
pw_loop_invoke(node->data_loop, pw_loop_invoke(node->data_loop,
do_move_nodes, SPA_ID_INVALID, &driver, sizeof(struct pw_impl_node *), do_move_nodes, SPA_ID_INVALID, &driver, sizeof(struct pw_impl_node *),
true, impl); true, impl);