diff options
author | Robin Gareus <robin@gareus.org> | 2015-11-25 00:55:41 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-11-25 00:56:05 +0100 |
commit | 71520c743212de6d4e42fbdfd8bfbd0611600dae (patch) | |
tree | 44f296e679de75ad423f36c6fcecefecd9cde4a8 /libs/ardour/ardour/analyser.h | |
parent | ff62cec27d710a5a25caf028010aadd5a4bf0bac (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.h | 6 |
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>); |