Fix recursive lock introduced in fbfeff4168 (#9359)

This commit is contained in:
Robin Gareus 2023-06-06 15:39:54 +02:00
parent 3468ffddbb
commit 6865615af8
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 15 additions and 1 deletions

View File

@ -169,6 +169,8 @@ private:
CaptureInfos capture_info;
mutable Glib::Threads::Mutex capture_info_lock;
samplepos_t get_capture_start_sample_locked (uint32_t n = 0) const;
boost::optional<samplepos_t> _capture_start_sample;
samplecnt_t _capture_captured;

View File

@ -312,7 +312,12 @@ ARDOUR::samplepos_t
DiskWriter::get_capture_start_sample (uint32_t n) const
{
Glib::Threads::Mutex::Lock lm (capture_info_lock);
return get_capture_start_sample_locked (n);
}
ARDOUR::samplepos_t
DiskWriter::get_capture_start_sample_locked (uint32_t n) const
{
if (capture_info.size() > n) {
/* this is a completed capture */
return capture_info[n]->start;
@ -1038,7 +1043,14 @@ DiskWriter::do_flush (RunContext ctxt, bool force_flush)
if ((total > _chunk_samples) || force_flush) {
Source::WriterLock lm(_midi_write_source->mutex());
if (_midi_write_source->midi_write (lm, *_midi_buf, timepos_t (get_capture_start_sample (0)), timecnt_t (to_write)) != to_write) {
timepos_t start_sample;
if (ctxt == TransportContext) {
start_sample = timepos_t(get_capture_start_sample_locked (0));
} else {
start_sample = timepos_t(get_capture_start_sample (0));
}
if (_midi_write_source->midi_write (lm, *_midi_buf, start_sample, timecnt_t (to_write)) != to_write) {
error << string_compose(_("MidiDiskstream %1: cannot write to disk"), id()) << endmsg;
return -1;
}