summaryrefslogtreecommitdiffstats
path: root/src/engine/BufferFactory.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2010-01-05 02:31:33 +0000
committerDavid Robillard <d@drobilla.net>2010-01-05 02:31:33 +0000
commitf1a8e02f49de5545b69af7afeaff376a1c47f1f8 (patch)
tree721e3f53786c7dd1579c1f72b396cf11e62bcc5e /src/engine/BufferFactory.cpp
parent13eaacac207abce0b99159b29ea06df47c4c0e15 (diff)
downloadingen-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.cpp21
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) {