stop_metering_thread ();
stop_hw_event_processing();
drop_backend ();
+ for (BackendMap::const_iterator i = _backends.begin(); i != _backends.end(); ++i) {
+ i->second->deinstantiate();
+ }
}
AudioEngine*
return _instance;
}
-void
-_thread_init_callback (void * /*arg*/)
-{
- /* make sure that anybody who needs to know about this thread
- knows about it.
- */
-
- pthread_set_name (X_("audioengine"));
-
- PBD::notify_gui_about_thread_creation ("gui", pthread_self(), X_("Audioengine"), 4096);
- PBD::notify_gui_about_thread_creation ("midiui", pthread_self(), X_("Audioengine"), 128);
-
- SessionEvent::create_per_thread_pool (X_("Audioengine"), 512);
-
- AsyncMIDIPort::set_process_thread (pthread_self());
-}
-
void
AudioEngine::split_cycle (pframes_t offset)
{
*/
if (_freewheeling && !Freewheel.empty()) {
- Freewheel (nframes);
+ Freewheel (nframes);
} else {
- if (_session) {
- _session->process (nframes);
- }
+ _session->process (nframes);
}
if (_freewheeling) {
AudioBackendInfo*
AudioEngine::backend_discover (const string& path)
{
+#ifdef PLATFORM_WINDOWS
+ // do not show popup dialog (e.g. missing libjack.dll)
+ // win7+ should use SetThreadErrorMode()
+ SetErrorMode(SEM_FAILCRITICALERRORS);
+#endif
Glib::Module module (path);
+#ifdef PLATFORM_WINDOWS
+ SetErrorMode(0); // reset to system default
+#endif
AudioBackendInfo* info;
AudioBackendInfo* (*dfunc)(void);
void* func = 0;
error << Glib::Module::get_last_error() << endmsg;
return 0;
}
-
- module.make_resident ();
dfunc = (AudioBackendInfo* (*)(void))func;
info = dfunc();
+ if (!info->available()) {
+ return 0;
+ }
+
+ module.make_resident ();
return info;
}