From 2fbdcbaeb28e62fffb4c63c5118fdc5243b426bc Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 19 Aug 2008 21:42:33 +0000 Subject: Gracefully handle full event queue on the engine side (fix loading massive patches). git-svn-id: http://svn.drobilla.net/lad/ingen@1450 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/engine/QueuedEventSource.hpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/libs/engine/QueuedEventSource.hpp') diff --git a/src/libs/engine/QueuedEventSource.hpp b/src/libs/engine/QueuedEventSource.hpp index 59e10b1e..6dea092d 100644 --- a/src/libs/engine/QueuedEventSource.hpp +++ b/src/libs/engine/QueuedEventSource.hpp @@ -22,11 +22,14 @@ #include #include "types.hpp" #include +#include #include #include #include "Event.hpp" #include "EventSource.hpp" +using Raul::AtomicInt; + namespace Ingen { class QueuedEvent; @@ -62,7 +65,7 @@ protected: Event* pop_earliest_queued_before(const SampleCount time); inline Event* pop_earliest_stamped_before(const SampleCount time); - inline bool unprepared_events() { return (_prepared_back != _back); } + inline bool unprepared_events() { return (_prepared_back.get() != _back.get()); } virtual void _whipped(); ///< Prepare 1 event @@ -72,13 +75,15 @@ private: //(FIXME: make this a separate class?) // 2-part queue for events that require pre-processing: - size_t _front; ///< Front of queue - size_t _back; ///< Back of entire queue (1 past index of back element) - size_t _prepared_back; ///< Back of prepared section (1 past index of back prepared element) + AtomicInt _front; ///< Front of queue + AtomicInt _back; ///< Back of entire queue (1 past index of back element) + AtomicInt _prepared_back; ///< Back of prepared section (1 past index of back prepared element) const size_t _size; QueuedEvent** _events; Raul::Semaphore _blocking_semaphore; + Raul::Semaphore _full_semaphore; + /** Queue for timestamped events (no pre-processing). */ Raul::SRSWQueue _stamped_queue; }; -- cgit v1.2.1