summaryrefslogtreecommitdiff
path: root/libs/pbd/pthread_utils.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-12-31 19:49:22 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-12-31 19:49:22 +0000
commit8ae20c0c4d1353afe2a42f17eb14270882a89174 (patch)
treeb1edbdd71ee33552e85c36b09174f1092da6c38f /libs/pbd/pthread_utils.cc
parentc6d51242691b593d3037784c993d101409c32c13 (diff)
stop metering thread as we disconnect a session from audioengine; explicitly drop connections early in ~Route so that we don't still have signals being handled while we destruct; fix up some valgrind warnings
git-svn-id: svn://localhost/ardour2/branches/3.0@6425 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/pbd/pthread_utils.cc')
-rw-r--r--libs/pbd/pthread_utils.cc17
1 files changed, 8 insertions, 9 deletions
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 *