From f3d8efcea968043d0b99f19fe608345e8cf034e1 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 15 Mar 2007 01:57:00 +0000 Subject: disgusting hack around mutex problem that has been delaying beta19, hopefully to be removed once we understand the issue better git-svn-id: svn://localhost/ardour2/trunk@1591 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/diskstream.h | 5 +++-- libs/ardour/audio_diskstream.cc | 5 +++-- libs/ardour/audiosource.cc | 2 +- libs/ardour/diskstream.cc | 1 + libs/pbd/pbd/mutex.h | 16 ++++++++++++++++ 5 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 libs/pbd/pbd/mutex.h (limited to 'libs') diff --git a/libs/ardour/ardour/diskstream.h b/libs/ardour/ardour/diskstream.h index b18d56b9fd..5165a6943d 100644 --- a/libs/ardour/ardour/diskstream.h +++ b/libs/ardour/ardour/diskstream.h @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -237,7 +238,7 @@ class IO; static nframes_t disk_io_chunk_frames; vector capture_info; - Glib::Mutex capture_info_lock; + PBDMutex capture_info_lock; uint32_t i_am_the_modifier; @@ -292,7 +293,7 @@ class IO; AlignStyle _persistent_alignment_style; bool first_input_change; - Glib::Mutex state_lock; + PBDMutex state_lock; nframes_t scrub_start; nframes_t scrub_buffer_size; diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc index f80e03b41f..f4520158c2 100644 --- a/libs/ardour/audio_diskstream.cc +++ b/libs/ardour/audio_diskstream.cc @@ -127,6 +127,8 @@ AudioDiskstream::~AudioDiskstream () } channels.clear(); } + + state_lock.lock (); } void @@ -539,7 +541,7 @@ AudioDiskstream::process (nframes_t transport_frame, nframes_t nframes, nframes_ // If we can't take the state lock return. if (!state_lock.trylock()) { return 1; - } + } adjust_capture_position = 0; @@ -825,7 +827,6 @@ AudioDiskstream::commit (nframes_t nframes) } state_lock.unlock(); - _processed = false; return need_butler; diff --git a/libs/ardour/audiosource.cc b/libs/ardour/audiosource.cc index ae9713bcd3..e3133fa4bb 100644 --- a/libs/ardour/audiosource.cc +++ b/libs/ardour/audiosource.cc @@ -592,7 +592,7 @@ AudioSource::build_peaks_from_scratch () Glib::Mutex::Lock lp (_lock); if (prepare_for_peakfile_writes ()) { - return -1; + goto out; } current_frame = 0; diff --git a/libs/ardour/diskstream.cc b/libs/ardour/diskstream.cc index 812709cda1..278042ca9f 100644 --- a/libs/ardour/diskstream.cc +++ b/libs/ardour/diskstream.cc @@ -356,6 +356,7 @@ void Diskstream::playlist_modified () { if (!i_am_the_modifier && !overwrite_queued) { + cerr << _name << " request overwrite\n"; _session.request_overwrite_buffer (this); overwrite_queued = true; } diff --git a/libs/pbd/pbd/mutex.h b/libs/pbd/pbd/mutex.h new file mode 100644 index 0000000000..60d915fa35 --- /dev/null +++ b/libs/pbd/pbd/mutex.h @@ -0,0 +1,16 @@ +#include +#include + +class PBDMutex : public Glib::Mutex +{ + public: + PBDMutex() : Glib::Mutex() {} + ~PBDMutex() { + if (trylock()) { + unlock (); + } else { + std::cerr << "Mutex @ " << this << " locked during destructor\n"; + unlock (); + } + } +}; -- cgit v1.2.3