From f1a8e02f49de5545b69af7afeaff376a1c47f1f8 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 5 Jan 2010 02:31:33 +0000 Subject: Event mixing. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2337 a436a847-0d15-0410-975c-d299462d15a1 --- src/engine/BufferFactory.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'src/engine/BufferFactory.cpp') diff --git a/src/engine/BufferFactory.cpp b/src/engine/BufferFactory.cpp index d84cf658..aff44254 100644 --- a/src/engine/BufferFactory.cpp +++ b/src/engine/BufferFactory.cpp @@ -46,17 +46,20 @@ struct BufferDeleter { SharedPtr -BufferFactory::get(Shared::PortType type, size_t size) +BufferFactory::get(Shared::PortType type, size_t size, bool force_create) { Raul::AtomicPtr& head_ptr = free_list(type); - Buffer* try_head; - Buffer* next; - do { - try_head = head_ptr.get(); - if (!try_head) - break; - next = try_head->_next; - } while (!head_ptr.compare_and_exchange(try_head, next)); + Buffer* try_head = NULL; + + if (!force_create) { + Buffer* next; + do { + try_head = head_ptr.get(); + if (!try_head) + break; + next = try_head->_next; + } while (!head_ptr.compare_and_exchange(try_head, next)); + } if (!try_head) { if (ThreadManager::current_thread_id() != THREAD_PROCESS) { -- cgit v1.2.1