From 71520c743212de6d4e42fbdfd8bfbd0611600dae Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 25 Nov 2015 00:55:41 +0100 Subject: 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). --- libs/ardour/ardour/analyser.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'libs/ardour/ardour') 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, 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 > analysis_queue; static void analyse_audio_file_source (boost::shared_ptr); -- cgit v1.2.3