summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/analyser.h
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-11-25 00:55:41 +0100
committerRobin Gareus <robin@gareus.org>2015-11-25 00:56:05 +0100
commit71520c743212de6d4e42fbdfd8bfbd0611600dae (patch)
tree44f296e679de75ad423f36c6fcecefecd9cde4a8 /libs/ardour/ardour/analyser.h
parentff62cec27d710a5a25caf028010aadd5a4bf0bac (diff)
Prevent crash at session-close when analysing.
The Analyser only holds a weak-pointer the the Source, session-destruction frees the actual Source, which is fatal for any ongoing audio analysis. This fix simply waits for the current ongoing analysis to complete, ideally TransientDetector::run, EBUr128Analysis::run, OnsetDetector::run and AudioAnalyser::analyse could be interrupted. Alternate option: cancel the Analyser::work thread (and re-create with the every session).
Diffstat (limited to 'libs/ardour/ardour/analyser.h')
-rw-r--r--libs/ardour/ardour/analyser.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/libs/ardour/ardour/analyser.h b/libs/ardour/ardour/analyser.h
index 8e757ef4e9..fec6bd21e3 100644
--- a/libs/ardour/ardour/analyser.h
+++ b/libs/ardour/ardour/analyser.h
@@ -40,11 +40,13 @@ class LIBARDOUR_API Analyser {
static void init ();
static void queue_source_for_analysis (boost::shared_ptr<Source>, bool force);
static void work ();
+ static void flush ();
private:
static Analyser* the_analyser;
- static Glib::Threads::Mutex analysis_queue_lock;
- static Glib::Threads::Cond SourcesToAnalyse;
+ static Glib::Threads::Mutex analysis_active_lock;
+ static Glib::Threads::Mutex analysis_queue_lock;
+ static Glib::Threads::Cond SourcesToAnalyse;
static std::list<boost::weak_ptr<Source> > analysis_queue;
static void analyse_audio_file_source (boost::shared_ptr<AudioFileSource>);