summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/audioengine.cc12
-rw-r--r--libs/ardour/butler.cc1
-rw-r--r--libs/ardour/route.cc8
-rw-r--r--libs/pbd/controllable.cc1
-rw-r--r--libs/pbd/pthread_utils.cc17
-rw-r--r--libs/surfaces/generic_midi/midifunction.cc2
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