Paul Davis
166ac63924
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. |
||
---|---|---|
doc | ||
gtk2_ardour | ||
headless | ||
libs | ||
luasession | ||
msvc_extra_headers | ||
MSVCardour3 | ||
MSVCMixbus3 | ||
MSVCvst_scan | ||
nutemp | ||
session_utils | ||
share | ||
tools | ||
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