mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
impl-link: use loopvisited variable for loop checking
Don't reuse the visited variable for checking feedback loops because the scheduler expects it to be false on entry. Use a different variable instead.
This commit is contained in:
parent
afb7090ba0
commit
33f90abfb5
2 changed files with 4 additions and 3 deletions
|
|
@ -935,7 +935,7 @@ static bool pw_impl_node_can_reach(struct pw_impl_node *output, struct pw_impl_n
|
||||||
struct pw_impl_port *p;
|
struct pw_impl_port *p;
|
||||||
struct pw_impl_link *l;
|
struct pw_impl_link *l;
|
||||||
|
|
||||||
output->visited = true;
|
output->loopchecked = true;
|
||||||
|
|
||||||
if (output == input)
|
if (output == input)
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -947,11 +947,11 @@ static bool pw_impl_node_can_reach(struct pw_impl_node *output, struct pw_impl_n
|
||||||
|
|
||||||
spa_list_for_each(p, &output->output_ports, link) {
|
spa_list_for_each(p, &output->output_ports, link) {
|
||||||
spa_list_for_each(l, &p->links, output_link)
|
spa_list_for_each(l, &p->links, output_link)
|
||||||
l->input->node->visited = l->feedback;
|
l->input->node->loopchecked = l->feedback;
|
||||||
}
|
}
|
||||||
spa_list_for_each(p, &output->output_ports, link) {
|
spa_list_for_each(p, &output->output_ports, link) {
|
||||||
spa_list_for_each(l, &p->links, output_link) {
|
spa_list_for_each(l, &p->links, output_link) {
|
||||||
if (l->input->node->visited)
|
if (l->input->node->loopchecked)
|
||||||
continue;
|
continue;
|
||||||
if (pw_impl_node_can_reach(l->input->node, input, hop+1))
|
if (pw_impl_node_can_reach(l->input->node, input, hop+1))
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -672,6 +672,7 @@ struct pw_impl_node {
|
||||||
unsigned int want_driver:1; /**< this node wants to be assigned to a driver */
|
unsigned int want_driver:1; /**< this node wants to be assigned to a driver */
|
||||||
unsigned int passive:1; /**< driver graph only has passive links */
|
unsigned int passive:1; /**< driver graph only has passive links */
|
||||||
unsigned int freewheel:1; /**< if this is the freewheel driver */
|
unsigned int freewheel:1; /**< if this is the freewheel driver */
|
||||||
|
unsigned int loopchecked:1; /**< for feedback loop checking */
|
||||||
|
|
||||||
uint32_t port_user_data_size; /**< extra size for port user data */
|
uint32_t port_user_data_size; /**< extra size for port user data */
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue