diff options
author | David Robillard <d@drobilla.net> | 2012-08-16 00:59:35 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2012-08-16 00:59:35 +0000 |
commit | da4c1fcad194f4f3f399f6a4a731df34567c95ef (patch) | |
tree | 22c875232a4639f0f80d818e3a399e16c4ffe6ad /src/server/PreProcessor.cpp | |
parent | d64815e24c043ac87b1504c5f02e93b11c4d8285 (diff) | |
download | ingen-da4c1fcad194f4f3f399f6a4a731df34567c95ef.tar.gz ingen-da4c1fcad194f4f3f399f6a4a731df34567c95ef.tar.bz2 ingen-da4c1fcad194f4f3f399f6a4a731df34567c95ef.zip |
Remove Raul::Slave class.
Merge Thread::stop() and Thread::join().
Clean thread shut down without the use of pthread_cancel().
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@4708 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/server/PreProcessor.cpp')
-rw-r--r-- | src/server/PreProcessor.cpp | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/server/PreProcessor.cpp b/src/server/PreProcessor.cpp index 9db13fd1..13746113 100644 --- a/src/server/PreProcessor.cpp +++ b/src/server/PreProcessor.cpp @@ -26,14 +26,14 @@ namespace Ingen { namespace Server { PreProcessor::PreProcessor() - : Raul::Slave("PreProcessor") + : Raul::Thread("PreProcessor") + , _sem(0) { start(); } PreProcessor::~PreProcessor() { - stop(); } void @@ -61,7 +61,7 @@ PreProcessor::event(Event* const ev) _prepared_back = ev; } - whip(); + _sem.post(); } unsigned @@ -110,18 +110,21 @@ PreProcessor::process(ProcessContext& context, PostProcessor& dest, bool limit) /** Pre-process a single event */ void -PreProcessor::_whipped() +PreProcessor::_run() { ThreadManager::set_flag(THREAD_PRE_PROCESS); - Event* ev = _prepared_back.get(); - if (!ev) - return; + while (_sem.wait() && !_exit_flag) { + Event* const ev = _prepared_back.get(); + if (!ev) { + return; + } - assert(!ev->is_prepared()); - ev->pre_process(); - assert(ev->is_prepared()); + assert(!ev->is_prepared()); + ev->pre_process(); + assert(ev->is_prepared()); - _prepared_back = (Event*)ev->next(); + _prepared_back = (Event*)ev->next(); + } } } // namespace Server |