mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-12-15 08:56:38 -05:00
audioadapter: don't loop forever
Try 8 times to make progress, if nothing after that, xrun. A stream that keeps sending 0 sized buffers would otherwise get into an endless loop. See #2359
This commit is contained in:
parent
19e3e20c47
commit
32e957345d
1 changed files with 3 additions and 3 deletions
|
|
@ -1313,7 +1313,7 @@ impl_node_port_reuse_buffer(void *object, uint32_t port_id, uint32_t buffer_id)
|
||||||
static int impl_node_process(void *object)
|
static int impl_node_process(void *object)
|
||||||
{
|
{
|
||||||
struct impl *this = object;
|
struct impl *this = object;
|
||||||
int status = 0, fstatus;
|
int status = 0, fstatus, retry = 8;
|
||||||
|
|
||||||
spa_log_trace_fp(this->log, "%p: process convert:%p driver:%d",
|
spa_log_trace_fp(this->log, "%p: process convert:%p driver:%d",
|
||||||
this, this->convert, this->driver);
|
this, this->convert, this->driver);
|
||||||
|
|
@ -1328,7 +1328,7 @@ static int impl_node_process(void *object)
|
||||||
/* an input node (sink).
|
/* an input node (sink).
|
||||||
* First we run the converter to process the input for the follower
|
* First we run the converter to process the input for the follower
|
||||||
* then if it produced data, we run the follower. */
|
* then if it produced data, we run the follower. */
|
||||||
while (true) {
|
while (retry--) {
|
||||||
status = this->convert ? spa_node_process(this->convert) : 0;
|
status = this->convert ? spa_node_process(this->convert) : 0;
|
||||||
/* schedule the follower when the converter needed
|
/* schedule the follower when the converter needed
|
||||||
* a recycled buffer */
|
* a recycled buffer */
|
||||||
|
|
@ -1357,7 +1357,7 @@ static int impl_node_process(void *object)
|
||||||
}
|
}
|
||||||
} else if (!this->driver) {
|
} else if (!this->driver) {
|
||||||
bool done = false;
|
bool done = false;
|
||||||
while (true) {
|
while (retry--) {
|
||||||
/* output node (source). First run the converter to make
|
/* output node (source). First run the converter to make
|
||||||
* sure we push out any queued data. Then when it needs
|
* sure we push out any queued data. Then when it needs
|
||||||
* more data, schedule the follower. */
|
* more data, schedule the follower. */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue