ardour/libs
Carl Hetherington 4e4306d125 Use Request::Pause rather than Request::Wait for
Butler::wait_until_finished. Otherwise the following bad
thing happens:

1.  The export code wants to call some Butler functions, so it calls
   calls Butler::wait_until_finished.
2.  This (used to) write Request::Wake into the butler's request pipe.
3.  Imagine that when this happens, the butler is already doing stuff.
4.  Meanwhile, Butler::wait_until_finished is waiting on Butler::paused.
5.  Some time later, the butler finishes its other stuff.
6.  Then it signals "paused".
7.  This causes Butler::wait_until_finished to return, so the export code
   thinks everything's ok and starts calling butler functions.
8.  Then the butler sees the Request::Wake, wakes up, and by unhappy coincidence
   ends up calling read on the same diskstream that the export code has just called.

This causes corruption of the Diskstream buffers, resulting in mantis #4283.

Using Request::Pause instead means that the butler will still wake in step #8,
but should_run will be false, so nothing much will happen and the export code
will be unimpeded.

For future reference, this bug was easiest to track down after adding a debugging
mutex to AudioDiskstream and then try-locking it in AudioDiskstream::_do_refill;
as far as I can see, _do_refill should never be called by two threads at the


git-svn-id: svn://localhost/ardour2/branches/3.0@11163 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-01-04 21:07:04 +00:00
..
appleutility fixes for 98% of all the warnings/errors reported by OS X gcc on tiger 2011-09-30 17:55:14 +00:00
ardour Use Request::Pause rather than Request::Wait for 2012-01-04 21:07:04 +00:00
audiographer Apply patch from timbyr to fix building with --test. 2011-11-13 03:54:29 +00:00
clearlooks-newer Remove use of waf compat15 tool. 2011-09-29 19:58:05 +00:00
clearlooks-older Merged revisions 6292,6294-6295,6311,6314 via svnmerge from 2009-12-06 14:21:46 +00:00
evoral Don't round control list events when x-scaling them; prevents large loss of accuracy with xfades when they are scaled to be small and then expanded again (#4602). 2011-12-31 13:25:29 +00:00
fst Remove VST current_program variable, since that stuff is 2011-11-23 19:29:38 +00:00
gtkmm2ext fix default response behaviour of Gtkmm2ext::Prompter (from colinf) 2011-12-30 01:41:21 +00:00
midi++2 Add basic test of playlist layering. 2011-12-15 14:33:20 +00:00
panners Implement reset() in panners, and use it from the GUI (fixes #4196). 2011-10-22 16:19:27 +00:00
pbd new DEBUG_ENABLED(bits) macro, potentially useful here and there 2011-12-28 21:01:52 +00:00
qm-dsp fixes for 98% of all the warnings/errors reported by OS X gcc on tiger 2011-09-30 17:55:14 +00:00
rubberband fixes for 98% of all the warnings/errors reported by OS X gcc on tiger 2011-09-30 17:55:14 +00:00
surfaces rename Timecode::BBT_Time::ticks_per_beat to Timecode::BBT_Time::ticks_per_bar_division which is a more accurate and informative name. The number doesn't describe the smallest division of a "beat" (which is only defined contextually anyway), but rather the smallest division of the the divisions of a bar. If using a meter of 4/8, there are 4 divisions per bar, and we can divide each one into ticks_per_bar_division pieces; in a separate meter (section) of 3/8, there are 3 divisions per bar, each of which can be divided into ticks_per_bar_division_pieces. 2011-12-19 19:44:43 +00:00
taglib fixes for 98% of all the warnings/errors reported by OS X gcc on tiger 2011-09-30 17:55:14 +00:00
timecode intermediate commit as all tempo/meter stuff starts to walk the precompute Bars|Beats list. Still have ::round_to_beat_subdivision() to fix. haven't really done any thorough testing at this point, but basic stuff seems OK 2012-01-02 23:32:33 +00:00
vamp-plugins Use is_defined to check for HAVE_* variables set by checks. 2011-09-29 20:29:06 +00:00
vamp-sdk fixes for 98% of all the warnings/errors reported by OS X gcc on tiger 2011-09-30 17:55:14 +00:00
.cvsignore