diff options
-rw-r--r-- | libs/ardour/audioengine.cc | 12 | ||||
-rw-r--r-- | libs/ardour/butler.cc | 1 | ||||
-rw-r--r-- | libs/ardour/route.cc | 8 | ||||
-rw-r--r-- | libs/pbd/controllable.cc | 1 | ||||
-rw-r--r-- | libs/pbd/pthread_utils.cc | 17 | ||||
-rw-r--r-- | libs/surfaces/generic_midi/midifunction.cc | 2 |
6 files changed, 25 insertions, 16 deletions
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index 322365fb9f..2035265c46 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -134,9 +134,7 @@ _thread_init_callback (void * /*arg*/) knows about it. */ - char* c = new char[12]; - strcpy (c, X_("audioengine")); - pthread_set_name (c); + 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); @@ -209,8 +207,6 @@ AudioEngine::start () // error << _("cannot activate JACK client") << endmsg; } - start_metering_thread(); - _raw_buffer_sizes[DataType::AUDIO] = blocksize * sizeof(float); } @@ -550,6 +546,8 @@ AudioEngine::start_metering_thread () void AudioEngine::meter_thread () { + pthread_set_name (X_("meter")); + while (true) { Glib::usleep (10000); /* 1/100th sec interval */ if (g_atomic_int_get(&m_meter_exit)) { @@ -567,6 +565,8 @@ AudioEngine::set_session (Session *s) SessionHandlePtr::set_session (s); if (_session) { + + start_metering_thread (); nframes_t blocksize = jack_get_buffer_size (_jack); @@ -602,6 +602,8 @@ AudioEngine::remove_session () if (_running) { + stop_metering_thread (); + if (_session) { session_remove_pending = true; session_removed.wait(_process_lock); diff --git a/libs/ardour/butler.cc b/libs/ardour/butler.cc index 25d8d6c148..addf6ddf27 100644 --- a/libs/ardour/butler.cc +++ b/libs/ardour/butler.cc @@ -115,6 +115,7 @@ void * Butler::_thread_work (void* arg) { SessionEvent::create_per_thread_pool ("butler events", 64); + pthread_set_name (X_("butler")); return ((Butler *) arg)->thread_work (); } diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 69b37fb7c3..29cc32bf24 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -165,8 +165,14 @@ Route::~Route () { DEBUG_TRACE (DEBUG::Destruction, string_compose ("route %1 destructor\n", _name)); + /* do this early so that we don't get incoming signals as we are going through destruction + */ + + drop_connections (); + /* don't use clear_processors here, as it depends on the session which may - be half-destroyed by now */ + be half-destroyed by now + */ Glib::RWLock::WriterLock lm (_processor_lock); for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { diff --git a/libs/pbd/controllable.cc b/libs/pbd/controllable.cc index d5b81a73ed..38780bddbe 100644 --- a/libs/pbd/controllable.cc +++ b/libs/pbd/controllable.cc @@ -40,6 +40,7 @@ PBD::ScopedConnectionList registry_connections; Controllable::Controllable (const string& name, Flag f) : _name (name) , _flags (f) + , _touching (false) { add (*this); } diff --git a/libs/pbd/pthread_utils.cc b/libs/pbd/pthread_utils.cc index 34ac6fd1af..d9e5ca4078 100644 --- a/libs/pbd/pthread_utils.cc +++ b/libs/pbd/pthread_utils.cc @@ -21,6 +21,7 @@ #include <set> #include <iostream> #include <string> +#include <cstring> #include <stdint.h> #include "pbd/pthread_utils.h" @@ -59,9 +60,9 @@ PBD::notify_gui_about_thread_creation (std::string target_gui, pthread_t thread, struct ThreadStartWithName { void* (*thread_work)(void*); void* arg; - const char* name; + std::string name; - ThreadStartWithName (void* (*f)(void*), void* a, const char* s) + ThreadStartWithName (void* (*f)(void*), void* a, const std::string& s) : thread_work (f), arg (a), name (s) {} }; @@ -72,7 +73,7 @@ fake_thread_start (void* arg) void* (*thread_work)(void*) = ts->thread_work; void* thread_arg = ts->arg; - pthread_set_name (ts->name); + pthread_set_name (ts->name.c_str()); delete ts; /* name will be deleted by the default handler for GStaticPrivate, when the thread exits */ @@ -90,10 +91,7 @@ pthread_create_and_store (string name, pthread_t *thread, void * (*start_routin pthread_attr_init(&default_attr); pthread_attr_setstacksize(&default_attr, 500000); - char* cname = new char[name.length() + 1]; - strcpy (cname, name.c_str()); - - ThreadStartWithName* ts = new ThreadStartWithName (start_routine, arg, cname); + ThreadStartWithName* ts = new ThreadStartWithName (start_routine, arg, name); if ((ret = thread_creator (thread, &default_attr, fake_thread_start, ts)) == 0) { pthread_mutex_lock (&thread_map_lock); @@ -109,8 +107,9 @@ pthread_create_and_store (string name, pthread_t *thread, void * (*start_routin void pthread_set_name (const char *str) { - /* str will be deleted when this thread exits */ - thread_name.set (const_cast<char*>(str)); + /* copy string and delete it when exiting */ + + thread_name.set (strdup (str), free); } const char * diff --git a/libs/surfaces/generic_midi/midifunction.cc b/libs/surfaces/generic_midi/midifunction.cc index d6cbdb9a6e..3ce447b799 100644 --- a/libs/surfaces/generic_midi/midifunction.cc +++ b/libs/surfaces/generic_midi/midifunction.cc @@ -34,7 +34,7 @@ MIDIFunction::MIDIFunction (MIDI::Port& p) MIDIFunction::~MIDIFunction () { - delete sysex; + delete [] sysex; } int |