fix/workaround OSX "No Memory Pool"
authorRobin Gareus <robin@gareus.org>
Wed, 9 Dec 2015 10:12:56 +0000 (11:12 +0100)
committerRobin Gareus <robin@gareus.org>
Wed, 9 Dec 2015 10:13:18 +0000 (11:13 +0100)
fixes issue on MacBookPro11,1 OSX 10.10

* Coreaudio: internal speaker + internal Mic
* start recording
* plug-in headphone
* stop recording
-> crash
  process_callback -> [..] stop_transport -> no RT memory pool
  for realtime event.

libs/ardour/audioengine.cc

index a87a5ee7d0192015a07e17c34a812d6acd255f20..84227708ed94d8c73bade3bbc91c045e584aa1ad 100644 (file)
@@ -215,6 +215,26 @@ AudioEngine::process_callback (pframes_t nframes)
                return 0;
        }
 
+       /* The coreaudio-backend calls thread_init_callback() if
+        * the hardware changes or pthread_self() changes.
+        *
+        * However there are cases when neither holds true, yet
+        * the thread-pool changes: e.g. connect a headphone to
+        * a shared mic/headphone jack.
+        * It's probably related to, or caused by clocksource changes.
+        *
+        * For reasons yet unknown Glib::Threads::Private() can
+        * use a different thread-private in the same pthread
+        * (coreaudio render callback).
+        *
+        * Coreaudio must set something which influences
+        * pthread_key_t uniqness or reset the key using
+        * pthread_getspecific().
+        */
+       if (! SessionEvent::has_per_thread_pool ()) {
+               thread_init_callback (NULL);
+       }
+
        bool return_after_remove_check = false;
 
        if (_measuring_latency == MeasureAudio && _mtdm) {