From 7caa8eabf8d4395f98764424d9c0b1bccbf32c77 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
Date: Thu, 3 May 2012 17:41:20 -0400
Subject: [PATCH] #10220: Fix recording thread does not exit when hanging up
 while recording

---
 daemon/src/audio/audiorecorder.cpp | 7 ++++---
 daemon/src/audio/audiorecorder.h   | 2 ++
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/daemon/src/audio/audiorecorder.cpp b/daemon/src/audio/audiorecorder.cpp
index f49c00771c..54a742179a 100644
--- a/daemon/src/audio/audiorecorder.cpp
+++ b/daemon/src/audio/audiorecorder.cpp
@@ -30,6 +30,7 @@
 
 #include "audiorecorder.h"
 #include "mainbuffer.h"
+#include "logger.h"
 #include <sstream>
 #include <cassert>
 #include <tr1/array>
@@ -37,7 +38,7 @@
 int AudioRecorder::count_ = 0;
 
 AudioRecorder::AudioRecorder(AudioRecord  *arec, MainBuffer *mb) : ost::Thread(),
-    recorderId_(), mbuffer_(mb), arecord_(arec)
+    recorderId_(), mbuffer_(mb), arecord_(arec), running_(true)
 {
     assert(mb);
 
@@ -63,13 +64,13 @@ void AudioRecorder::run()
     std::tr1::array<SFLDataFormat, BUFFER_LENGTH> buffer;
     buffer.assign(0);
 
-    while (isRunning()) {
+    while (running_) {
         size_t availBytes = mbuffer_->availForGet(recorderId_);
         mbuffer_->getData(buffer.data(), std::min(availBytes, buffer.size()), recorderId_);
 
         if (availBytes > 0)
             arecord_->recData(buffer.data(), availBytes / sizeof(SFLDataFormat));
 
-        sleep(20);
+        Thread::sleep(20);
     }
 }
diff --git a/daemon/src/audio/audiorecorder.h b/daemon/src/audio/audiorecorder.h
index 82be9a4795..c417b4cc7b 100644
--- a/daemon/src/audio/audiorecorder.h
+++ b/daemon/src/audio/audiorecorder.h
@@ -44,6 +44,7 @@ class AudioRecorder : public ost::Thread {
         AudioRecorder(AudioRecord  *arec, MainBuffer *mb);
 
         ~AudioRecorder() {
+            running_ = false;
             terminate();
         }
 
@@ -61,6 +62,7 @@ class AudioRecorder : public ost::Thread {
         std::string recorderId_;
         MainBuffer *mbuffer_;
         AudioRecord *arecord_;
+        bool running_;
 };
 
 #endif
-- 
GitLab