From 308d138144dcc3b62646da4f5cd428da5f89b771 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 7 Jul 2020 04:45:56 +0200 Subject: [PATCH] Fix audible blibs due to inconsistent monitor state -- #8275 It is possible that Route::monitoring_state() returns (MonitoringDisk | MonitorSilence) This lead to various cases where there were is a direct comparison (ms == MonitoringDisk). DiskReader::run tests for MonitoringDisk to check if the buffer needs to be zeroed while locating. Likewise Route::process_output_buffers() also explicitly tests for both MonitoringDisk and MonitoringDisk. The issue was likely introduced in fbe80751173ce7 (although it may have been possible in earlier version when using hardware monitoring as well). --- libs/ardour/ardour/types.h | 2 +- libs/ardour/route.cc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h index f8910715a0..06e06d0196 100644 --- a/libs/ardour/ardour/types.h +++ b/libs/ardour/ardour/types.h @@ -463,7 +463,7 @@ enum MonitorChoice { }; enum MonitorState { - MonitoringSilence = 0x1, + MonitoringSilence = 0x0, MonitoringInput = 0x2, MonitoringDisk = 0x4, MonitoringCue = 0x6, diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 3eac521d7e..cebed69f82 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -6152,10 +6152,10 @@ Route::monitoring_state () const if (m != MonitorAuto) { - MonitorState ms ((MonitorState) 0); + MonitorState ms = MonitoringSilence; if (m & MonitorInput) { - ms = MonitoringInput; + ms = MonitorState (ms | MonitoringInput); } if (m & MonitorDisk) {