13
0
Go to file
Paul Davis 166ac63924 waveview: redesign thread exit strategy
The previous design had a race condition. When WaveViewThreads::stop_threads() was called, it would
first acquire the mutex, then set _quit, then call condition.broadcast(). But worker threads would
check _quit without holding the mutex. It was therefore for a thread to be delayed in its
own lock acquisition by the ::stop_threads() caller, then end up back in cond.wait() AFTER
the cond.broadcast() was done. Such a thread would sleep forever and never wake up.

This new design removes WaveViewDrawRequestQueue, which was a clean encapsulation of the
queueing aspects of WaveViewThreads, but unfortunately made correct mutex acquisition
and condition signalling/waiting needlessly complex. THe mutex, condition variable
and actual queue were moved into WaveViewThreads, and all worker threads execute a method
of the class which gives the appropriate code easy access to the mutex and condition var,
which must always be used together.
2021-05-10 21:41:26 -06:00
doc
gtk2_ardour Update Russian translation 2021-05-11 02:21:15 +02:00
headless
libs waveview: redesign thread exit strategy 2021-05-10 21:41:26 -06:00
luasession
msvc_extra_headers Emulate exp2f() for older MS compilers where it wasn't available 2021-05-05 17:50:41 +01:00
MSVCardour3
MSVCMixbus3
MSVCvst_scan
nutemp
session_utils
share Avoid regex convention in script documentation 2021-05-08 00:35:31 +02:00
tools Update compile.sh 2021-05-07 16:25:21 -06:00
vst
.dir-locals.el
.gitattributes
.gitignore
ardour.1
COPYING
instant.xml.sae
msvc32-fixup.pl
PACKAGER_README
README
README-GITHUB.txt
system_config
testfile.flac
testfile.ogg
TRANSLATORS
waf
wscript

Please see the Ardour web site at https://ardour.org/ for all documentation..

For information on building ardour: 
      
     https://ardour.org/development.html