summaryrefslogtreecommitdiff
path: root/orkaudio/ImmediateProcessing.cpp
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2005-11-15 04:19:31 +0000
committerHenri Herscher <henri@oreka.org>2005-11-15 04:19:31 +0000
commit7653151cb08cfa40eec22e7aac3068b009207bc8 (patch)
treec41e2f1bbf73001791248fb18d842a01978ad0e8 /orkaudio/ImmediateProcessing.cpp
parent61cb474c09cce3a667774c4f4eef093c2025f324 (diff)
Improvements in the shutdown procedure (NT service does not crash on exit anymore, give two seconds to threads to exit properly).
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@44 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkaudio/ImmediateProcessing.cpp')
-rw-r--r--orkaudio/ImmediateProcessing.cpp29
1 files changed, 22 insertions, 7 deletions
diff --git a/orkaudio/ImmediateProcessing.cpp b/orkaudio/ImmediateProcessing.cpp
index 197f505..26f564e 100644
--- a/orkaudio/ImmediateProcessing.cpp
+++ b/orkaudio/ImmediateProcessing.cpp
@@ -15,6 +15,7 @@
#include "LogManager.h"
#include "ace/OS_NS_unistd.h"
#include "BatchProcessing.h"
+#include "Daemon.h"
ImmediateProcessing ImmediateProcessing::m_immediateProcessingSingleton;
@@ -36,19 +37,32 @@ void ImmediateProcessing::ThreadHandler(void *args)
{
ImmediateProcessing* pImmediateProcessing = ImmediateProcessing::GetInstance();
- for(;;)
+ bool stop = false;
+
+ for(;stop == false;)
{
try
{
AudioTapeRef audioTapeRef = pImmediateProcessing->m_audioTapeQueue.pop();
- //LOG4CXX_DEBUG(LOG.immediateProcessingLog, CStdString("Got chunk"));
-
- audioTapeRef->Write();
- if (audioTapeRef->IsStoppedAndValid())
+ if(audioTapeRef.get() == NULL)
+ {
+ if(DaemonSingleton::instance()->IsStopping())
+ {
+ stop = true;
+ }
+ }
+ else
{
- // Forward to batch processing thread
- BatchProcessing::GetInstance()->AddAudioTape(audioTapeRef);
+ //LOG4CXX_DEBUG(LOG.immediateProcessingLog, CStdString("Got chunk"));
+
+ audioTapeRef->Write();
+
+ if (audioTapeRef->IsStoppedAndValid())
+ {
+ // Forward to batch processing thread
+ BatchProcessing::GetInstance()->AddAudioTape(audioTapeRef);
+ }
}
}
catch (CStdString& e)
@@ -56,6 +70,7 @@ void ImmediateProcessing::ThreadHandler(void *args)
LOG4CXX_ERROR(LOG.immediateProcessingLog, CStdString("ImmediateProcessing: ") + e);
}
}
+ LOG4CXX_INFO(LOG.immediateProcessingLog, CStdString("Exiting thread"));
}