diff options
author | Carl Hetherington <carl@carlh.net> | 2010-04-22 12:20:04 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-04-22 12:20:04 +0000 |
commit | c71cc3702e68e1dcde40d7d9fb1abb5a4699da49 (patch) | |
tree | dd1157d990d7f6f872ce970cf47d4b0753af01b6 /libs/ardour/buffer_manager.cc | |
parent | 9213e9c9094468ce21be378ea017b0da1405bf03 (diff) |
torbenh's buffer manager fixes from 3.0P
git-svn-id: svn://localhost/ardour2/branches/3.0@6959 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/buffer_manager.cc')
-rw-r--r-- | libs/ardour/buffer_manager.cc | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/libs/ardour/buffer_manager.cc b/libs/ardour/buffer_manager.cc index edaf0907e8..f9c73d5b3e 100644 --- a/libs/ardour/buffer_manager.cc +++ b/libs/ardour/buffer_manager.cc @@ -25,11 +25,14 @@ using namespace ARDOUR; using namespace PBD; RingBufferNPT<ThreadBuffers*>* BufferManager::thread_buffers = 0; +std::list<ThreadBuffers*>* BufferManager::thread_buffers_list = 0; +Glib::StaticMutex BufferManager::rb_mutex = GLIBMM_STATIC_MUTEX_INIT; void BufferManager::init (uint32_t size) { thread_buffers = new ThreadBufferFIFO (size+1); // must be one larger than requested + thread_buffers_list = new ThreadBufferList; /* and populate with actual ThreadBuffers */ @@ -37,12 +40,14 @@ BufferManager::init (uint32_t size) for (uint32_t n = 0; n < size; ++n) { ThreadBuffers* ts = new ThreadBuffers; thread_buffers->write (&ts, 1); + thread_buffers_list->push_back (ts); } } ThreadBuffers* BufferManager::get_thread_buffers () { + Glib::Mutex::Lock em (rb_mutex); ThreadBuffers* tbp; if (thread_buffers->read (&tbp, 1) == 1) { @@ -55,6 +60,7 @@ BufferManager::get_thread_buffers () void BufferManager::put_thread_buffers (ThreadBuffers* tbp) { + Glib::Mutex::Lock em (rb_mutex); thread_buffers->write (&tbp, 1); } @@ -63,7 +69,7 @@ BufferManager::ensure_buffers (ChanCount howmany) { /* this is protected by the audioengine's process lock: we do not */ - for (uint32_t n = 0; n < thread_buffers->bufsize() - 1; ++n) { - thread_buffers->buffer()[n]->ensure_buffers (howmany); - } + for (ThreadBufferList::iterator i = thread_buffers_list->begin(); i != thread_buffers_list_end(); ++i) { + (*i)->ensure_buffers (howmany); + } } |