diff --git a/src/modules/module-client-node/client-node.c b/src/modules/module-client-node/client-node.c index 8e4c8170d..935372a19 100644 --- a/src/modules/module-client-node/client-node.c +++ b/src/modules/module-client-node/client-node.c @@ -891,6 +891,11 @@ static int impl_node_process(struct spa_node *node) struct node *this = SPA_CONTAINER_OF(node, struct node, node); uint64_t cmd = 1; + if (this->impl->this.status != SPA_ID_INVALID) { + spa_log_trace(this->log, "%p: return %d", this, this->impl->this.status); + return this->impl->this.status; + } + spa_log_trace(this->log, "%p: send process", this); if (write(this->writefd, &cmd, 8) != 8) @@ -1319,6 +1324,7 @@ struct pw_client_node *pw_client_node_new(struct pw_resource *resource, return NULL; this = &impl->this; + this->status = SPA_ID_INVALID; impl->core = core; impl->t = pw_core_get_type(core); diff --git a/src/modules/module-client-node/client-node.h b/src/modules/module-client-node/client-node.h index 2f484392f..73ba9e4ea 100644 --- a/src/modules/module-client-node/client-node.h +++ b/src/modules/module-client-node/client-node.h @@ -35,6 +35,8 @@ struct pw_client_node { struct pw_node *node; struct pw_resource *resource; + + int status; }; struct pw_client_node * diff --git a/src/modules/module-client-node/client-stream.c b/src/modules/module-client-node/client-stream.c index 6e127dfcb..4619e3b87 100644 --- a/src/modules/module-client-node/client-stream.c +++ b/src/modules/module-client-node/client-stream.c @@ -688,6 +688,11 @@ static int impl_node_process(struct spa_node *node) } spa_log_trace(this->log, "%p: process %d", this, status); + if (status & SPA_STATUS_NEED_BUFFER) + impl->client_node->status = SPA_ID_INVALID; + else + impl->client_node->status = SPA_STATUS_HAVE_BUFFER; + return status; }