From 58e8d1cddd520ae0ddf39f16210f1500868a2b2e Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 14 Aug 2008 04:03:14 +0000 Subject: Lock RDF world mutex in all places slv2 or redland is accessed (fix random segfaults usually on patch loading). git-svn-id: http://svn.drobilla.net/lad/ingen@1367 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/engine/InputPort.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'src/libs/engine/InputPort.cpp') diff --git a/src/libs/engine/InputPort.cpp b/src/libs/engine/InputPort.cpp index b778579d..cf5501ca 100644 --- a/src/libs/engine/InputPort.cpp +++ b/src/libs/engine/InputPort.cpp @@ -56,6 +56,19 @@ InputPort::set_buffer_size(size_t size) } +bool +InputPort::prepare_poly(uint32_t poly) +{ + PortImpl::prepare_poly(poly); + + for (Connections::iterator c = _connections.begin(); c != _connections.end(); ++c) + ((ConnectionImpl*)c->get())->prepare_poly(poly); + + connect_buffers(); + return true; +} + + bool InputPort::apply_poly(Raul::Maid& maid, uint32_t poly) { @@ -65,7 +78,18 @@ InputPort::apply_poly(Raul::Maid& maid, uint32_t poly) for (Connections::iterator c = _connections.begin(); c != _connections.end(); ++c) ((ConnectionImpl*)c->get())->apply_poly(maid, poly); - return PortImpl::apply_poly(maid, poly); + PortImpl::apply_poly(maid, poly); + assert(this->poly() == poly); + + if (_connections.size() == 1) { + ConnectionImpl* c = _connections.begin()->get(); + for (uint32_t i=0; i < _poly; ++i) + _buffers->at(i)->join(c->buffer(i)); + } + + connect_buffers(); + + return true; } -- cgit v1.2.1