summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-12-07 05:26:52 +0000
committerDavid Robillard <d@drobilla.net>2007-12-07 05:26:52 +0000
commita702cc5799f9aa5e1902fd24667a31bce8461fd7 (patch)
treedb7f5e48628d5152e12168ead755837bedd441d2
parent7cf506c65ca517fc7cd4976f26fc6d5b7b42223c (diff)
downloadraul-a702cc5799f9aa5e1902fd24667a31bce8461fd7.tar.gz
raul-a702cc5799f9aa5e1902fd24667a31bce8461fd7.tar.bz2
raul-a702cc5799f9aa5e1902fd24667a31bce8461fd7.zip
Fix termination of evolution and resumed Jack execution.
git-svn-id: http://svn.drobilla.net/lad/raul@960 a436a847-0d15-0410-975c-d299462d15a1
-rw-r--r--raul/Thread.hpp5
-rw-r--r--src/Thread.cpp5
2 files changed, 9 insertions, 1 deletions
diff --git a/raul/Thread.hpp b/raul/Thread.hpp
index 29cade1..14652c9 100644
--- a/raul/Thread.hpp
+++ b/raul/Thread.hpp
@@ -70,8 +70,13 @@ protected:
*
* This is called once on start, and terminated on stop.
* Implementations likely want to put some infinite loop here.
+ *
+ * When _exit_flag becomes true (via a call to stop()) the loop
+ * should exit.
*/
virtual void _run() {}
+
+ bool _exit_flag;
private:
diff --git a/src/Thread.cpp b/src/Thread.cpp
index c0b570f..efa4c12 100644
--- a/src/Thread.cpp
+++ b/src/Thread.cpp
@@ -30,6 +30,7 @@ pthread_key_t Thread::_thread_key;
Thread::Thread(const string& name)
: _context(0)
, _name(name)
+ , _exit_flag(false)
, _pthread_exists(false)
{
pthread_once(&_thread_key_once, thread_key_alloc);
@@ -41,6 +42,7 @@ Thread::Thread(const string& name)
Thread::Thread(pthread_t thread, const string& name)
: _context(0)
, _name(name)
+ , _exit_flag(false)
, _pthread_exists(true)
, _pthread(thread)
{
@@ -86,7 +88,8 @@ void
Thread::stop()
{
if (_pthread_exists) {
- pthread_cancel(_pthread);
+ _exit_flag = true;
+ //pthread_cancel(_pthread);
pthread_join(_pthread, NULL);
_pthread_exists = false;
cout << "[" << _name << " Thread] Exiting." << endl;