link: only set port io once

Only set port_io once.

Fixes #186
This commit is contained in:
Wim Taymans 2019-09-27 10:34:51 +02:00
parent c59af4debc
commit 024429ea7b

View file

@ -55,9 +55,10 @@
struct impl { struct impl {
struct pw_link this; struct pw_link this;
bool prepare; unsigned int prepare:1;
bool activated; unsigned int ioset:1;
bool passive; unsigned int activated:1;
unsigned int passive:1;
struct pw_work_queue *work; struct pw_work_queue *work;
@ -756,13 +757,16 @@ int pw_link_activate(struct pw_link *this)
pw_link_prepare(this); pw_link_prepare(this);
if ((res = port_set_io(this, this->output, SPA_IO_Buffers, this->io, if (!impl->ioset) {
sizeof(struct spa_io_buffers), &this->rt.out_mix)) < 0) if ((res = port_set_io(this, this->output, SPA_IO_Buffers, this->io,
return res; sizeof(struct spa_io_buffers), &this->rt.out_mix)) < 0)
return res;
if ((res = port_set_io(this, this->input, SPA_IO_Buffers, this->io, if ((res = port_set_io(this, this->input, SPA_IO_Buffers, this->io,
sizeof(struct spa_io_buffers), &this->rt.in_mix)) < 0) sizeof(struct spa_io_buffers), &this->rt.in_mix)) < 0)
return res; return res;
impl->ioset = true;
}
if (this->info.state == PW_LINK_STATE_PAUSED) { if (this->info.state == PW_LINK_STATE_PAUSED) {
pw_loop_invoke(this->output->node->data_loop, pw_loop_invoke(this->output->node->data_loop,
@ -965,6 +969,7 @@ int pw_link_deactivate(struct pw_link *this)
port_set_io(this, this->output, SPA_IO_Buffers, NULL, 0, &this->rt.out_mix); port_set_io(this, this->output, SPA_IO_Buffers, NULL, 0, &this->rt.out_mix);
port_set_io(this, this->input, SPA_IO_Buffers, NULL, 0, &this->rt.in_mix); port_set_io(this, this->input, SPA_IO_Buffers, NULL, 0, &this->rt.in_mix);
impl->ioset = false;
impl->activated = false; impl->activated = false;
} }