summaryrefslogtreecommitdiff
path: root/libs/backends/jack
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-10-22 17:02:15 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2014-10-22 17:07:11 -0400
commit68458cde69bb6aae4dc8d3e5dce3e0ddc1be32e6 (patch)
treeefefa6245cac2907d73d481c816b660d2af2f63f /libs/backends/jack
parentaa0effb4cb38f4c3a06564bd9e6a0ee516d4f958 (diff)
fix all 4 backends' failure to include the main "backend" thread when computing ::in_process_thread()
Diffstat (limited to 'libs/backends/jack')
-rw-r--r--libs/backends/jack/jack_audiobackend.cc12
-rw-r--r--libs/backends/jack/jack_audiobackend.h1
2 files changed, 13 insertions, 0 deletions
diff --git a/libs/backends/jack/jack_audiobackend.cc b/libs/backends/jack/jack_audiobackend.cc
index 428d3f3c18..5dc8f23785 100644
--- a/libs/backends/jack/jack_audiobackend.cc
+++ b/libs/backends/jack/jack_audiobackend.cc
@@ -862,6 +862,16 @@ JACKAudioBackend::join_process_threads ()
bool
JACKAudioBackend::in_process_thread ()
{
+#ifdef COMPILER_MINGW
+ if (_main_thread == GetCurrentThread()) {
+ return true;
+ }
+#else // pthreads
+ if (pthread_equal (_main_thread, pthread_self()) != 0) {
+ return true;
+ }
+#endif
+
for (std::vector<jack_native_thread_t>::const_iterator i = _jack_threads.begin ();
i != _jack_threads.end(); i++) {
@@ -909,6 +919,8 @@ JACKAudioBackend::process_thread ()
/* JACK doesn't do this for us when we use the wait API
*/
+ _main_thread = pthread_self ();
+
AudioEngine::thread_init_callback (this);
while (1) {
diff --git a/libs/backends/jack/jack_audiobackend.h b/libs/backends/jack/jack_audiobackend.h
index 5a5aaaff63..0fd06407f3 100644
--- a/libs/backends/jack/jack_audiobackend.h
+++ b/libs/backends/jack/jack_audiobackend.h
@@ -209,6 +209,7 @@ class JACKAudioBackend : public AudioBackend {
std::map<DataType,size_t> _raw_buffer_sizes;
std::vector<jack_native_thread_t> _jack_threads;
+ jack_native_thread_t _main_thread;
static int _xrun_callback (void *arg);
static void* _process_thread (void *arg);