Work around a race condition

This covers a race condition in session transport that when synced to an
external engine it sometimes occurs that at the end of ::realtime_stop()
::transport_stopped_or_stopping() returns false when ::setup_rec_box() is
called. In this case the rec boxes are not erased when the recoding transport
is stopped.

This fixes this behavior about the remaining rec boxes, however the race
condition remains.

The race condition is reported in #8104. It should be considered reverting this
commit once the race condition is fixed.
This commit is contained in:
Johannes Mueller 2020-05-10 13:13:18 +02:00
parent 52ae134efb
commit bff9c9a5a1
2 changed files with 4 additions and 2 deletions

View File

@ -196,7 +196,8 @@ AudioStreamView::setup_rec_box ()
{
//cerr << _trackview.name() << " streamview SRB region_views.size() = " << region_views.size() << endl;
if (!_trackview.session()->transport_stopped_or_stopping()) {
if (!_trackview.session()->transport_stopped_or_stopping() &&
(_trackview.session()->transport_rolling() || _trackview.session()->get_record_enabled())) {
// cerr << "\trolling\n";

View File

@ -455,7 +455,8 @@ MidiStreamView::setup_rec_box ()
{
// cerr << _trackview.name() << " streamview SRB\n";
if (!_trackview.session()->transport_stopped_or_stopping()) {
if (!_trackview.session()->transport_stopped_or_stopping() &&
(_trackview.session()->transport_rolling() || _trackview.session()->get_record_enabled())) {
if (!rec_active &&
_trackview.session()->record_status() == Session::Recording &&