summaryrefslogtreecommitdiffstats
path: root/src/libs/engine/JackAudioDriver.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-01-06 19:39:56 +0000
committerDavid Robillard <d@drobilla.net>2007-01-06 19:39:56 +0000
commit69c5e7fe16b7d9d08db81a6d5e2762f0be3b081f (patch)
tree68fd1ea83beedaaaa97846ed09240a3585b2d931 /src/libs/engine/JackAudioDriver.cpp
parent2122a857662203936a04a39df7d0e1ad1db82853 (diff)
downloadingen-69c5e7fe16b7d9d08db81a6d5e2762f0be3b081f.tar.gz
ingen-69c5e7fe16b7d9d08db81a6d5e2762f0be3b081f.tar.bz2
ingen-69c5e7fe16b7d9d08db81a6d5e2762f0be3b081f.zip
Added ability to get Raul Thread for current calling context.
Strong threading assertions. Flowcanvas port removal fixes. Patch port destruction. Code cleanups, bug fixes. git-svn-id: http://svn.drobilla.net/lad/ingen@234 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/engine/JackAudioDriver.cpp')
-rw-r--r--src/libs/engine/JackAudioDriver.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libs/engine/JackAudioDriver.cpp b/src/libs/engine/JackAudioDriver.cpp
index 082afe5a..58834139 100644
--- a/src/libs/engine/JackAudioDriver.cpp
+++ b/src/libs/engine/JackAudioDriver.cpp
@@ -22,6 +22,7 @@
#include "Engine.h"
#include "util.h"
#include "Event.h"
+#include "ThreadManager.h"
#include "QueuedEvent.h"
#include "EventSource.h"
#include "PostProcessor.h"
@@ -122,6 +123,7 @@ JackAudioDriver::JackAudioDriver(Engine& engine,
std::string server_name,
jack_client_t* jack_client)
: _engine(engine),
+ _jack_thread(NULL),
_client(jack_client),
_buffer_size(jack_client ? jack_get_buffer_size(jack_client) : 0),
_sample_rate(jack_client ? jack_get_sample_rate(jack_client) : 0),
@@ -159,6 +161,7 @@ JackAudioDriver::JackAudioDriver(Engine& engine,
jack_on_shutdown(_client, shutdown_cb, this);
+ jack_set_thread_init_callback(_client, thread_init_cb, this);
jack_set_sample_rate_callback(_client, sample_rate_cb, this);
jack_set_buffer_size_callback(_client, buffer_size_cb, this);
}
@@ -310,10 +313,21 @@ JackAudioDriver::_process_cb(jack_nframes_t nframes)
void
+JackAudioDriver::_thread_init_cb()
+{
+ // Initialize thread specific data
+ _jack_thread = Thread::create_for_this_thread("Jack");
+ assert(&Thread::get() == _jack_thread);
+ _jack_thread->set_context(THREAD_PROCESS);
+ assert(ThreadManager::current_thread_id() == THREAD_PROCESS);
+}
+
+void
JackAudioDriver::_shutdown_cb()
{
cout << "[JackAudioDriver] Jack shutdown. Exiting." << endl;
_engine.quit();
+ _jack_thread = NULL;
}