summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-03-15 01:57:00 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-03-15 01:57:00 +0000
commitf3d8efcea968043d0b99f19fe608345e8cf034e1 (patch)
tree9c13b29bf849c57235119a6aa82224a01a26f7e5
parentf74981874f578ce5b698be7542a185d4d06b8873 (diff)
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
-rw-r--r--libs/ardour/ardour/diskstream.h5
-rw-r--r--libs/ardour/audio_diskstream.cc5
-rw-r--r--libs/ardour/audiosource.cc2
-rw-r--r--libs/ardour/diskstream.cc1
-rw-r--r--libs/pbd/pbd/mutex.h16
5 files changed, 24 insertions, 5 deletions
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 <pbd/fastlog.h>
#include <pbd/ringbufferNPT.h>
#include <pbd/stateful.h>
+#include <pbd/mutex.h>
#include <pbd/statefuldestructible.h>
#include <ardour/ardour.h>
@@ -237,7 +238,7 @@ class IO;
static nframes_t disk_io_chunk_frames;
vector<CaptureInfo*> 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 <glibmm/thread.h>
+#include <iostream>
+
+class PBDMutex : public Glib::Mutex
+{
+ public:
+ PBDMutex() : Glib::Mutex() {}
+ ~PBDMutex() {
+ if (trylock()) {
+ unlock ();
+ } else {
+ std::cerr << "Mutex @ " << this << " locked during destructor\n";
+ unlock ();
+ }
+ }
+};