audioadapter: avoid infinite loop

Rewrite the slave/converter loop a little to avoid infinite loops.
This commit is contained in:
Wim Taymans 2019-12-18 12:58:42 +01:00
parent 147f488514
commit 24ab22db12

View file

@ -875,16 +875,21 @@ static int impl_node_process(void *object)
status = spa_node_process(this->convert);
}
again:
status = spa_node_process(this->slave);
if (this->direction == SPA_DIRECTION_OUTPUT &&
!this->master && this->use_converter) {
while (true) {
status = spa_node_process(this->convert);
if (status & SPA_STATUS_HAVE_DATA)
break;
if (!(status & SPA_STATUS_HAVE_DATA) &&
(status & SPA_STATUS_NEED_DATA))
goto again;
if (status & SPA_STATUS_NEED_DATA) {
status = spa_node_process(this->slave);
if (!(status & SPA_STATUS_HAVE_DATA))
break;
}
}
}
spa_log_trace_fp(this->log, "%p: process status:%d", this, status);