diff options
author | David Robillard <d@drobilla.net> | 2010-01-05 02:31:33 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2010-01-05 02:31:33 +0000 |
commit | f1a8e02f49de5545b69af7afeaff376a1c47f1f8 (patch) | |
tree | 721e3f53786c7dd1579c1f72b396cf11e62bcc5e /src/engine/BufferFactory.cpp | |
parent | 13eaacac207abce0b99159b29ea06df47c4c0e15 (diff) | |
download | ingen-f1a8e02f49de5545b69af7afeaff376a1c47f1f8.tar.gz ingen-f1a8e02f49de5545b69af7afeaff376a1c47f1f8.tar.bz2 ingen-f1a8e02f49de5545b69af7afeaff376a1c47f1f8.zip |
Event mixing.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2337 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/BufferFactory.cpp')
-rw-r--r-- | src/engine/BufferFactory.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
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<Buffer> -BufferFactory::get(Shared::PortType type, size_t size) +BufferFactory::get(Shared::PortType type, size_t size, bool force_create) { Raul::AtomicPtr<Buffer>& 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) { |