diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-05-01 12:27:26 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-05-01 12:31:34 -0400 |
commit | e69531b953c5fe717b88b051acd087de3caed166 (patch) | |
tree | 9dd7f4dd48176c39966ef7aaa9c0b7fed493dc87 /libs | |
parent | cd004296729e50830d0c47c2734b26908508795b (diff) |
fix crash in butler when destroying before thread is started
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/butler.h | 1 | ||||
-rw-r--r-- | libs/ardour/butler.cc | 11 |
2 files changed, 8 insertions, 4 deletions
diff --git a/libs/ardour/ardour/butler.h b/libs/ardour/ardour/butler.h index efdaad1621..949668dab3 100644 --- a/libs/ardour/ardour/butler.h +++ b/libs/ardour/ardour/butler.h @@ -76,6 +76,7 @@ class LIBARDOUR_API Butler : public SessionHandleRef }; pthread_t thread; + bool have_thread; Glib::Threads::Mutex request_lock; Glib::Threads::Cond paused; bool should_run; diff --git a/libs/ardour/butler.cc b/libs/ardour/butler.cc index c9eb55a472..327665441e 100644 --- a/libs/ardour/butler.cc +++ b/libs/ardour/butler.cc @@ -43,6 +43,7 @@ namespace ARDOUR { Butler::Butler(Session& s) : SessionHandleRef (s) , thread() + , have_thread (false) , audio_dstream_capture_buffer_size(0) , audio_dstream_playback_buffer_size(0) , midi_dstream_buffer_size(0) @@ -126,16 +127,18 @@ Butler::start_thread() } //pthread_detach (thread); - + have_thread = true; return 0; } void Butler::terminate_thread () { - void* status; - queue_request (Request::Quit); - pthread_join (thread, &status); + if (have_thread) { + void* status; + queue_request (Request::Quit); + pthread_join (thread, &status); + } } void * |