13
0

Relax export preparation timeout

This increases timeout granularity and ensure that
rt (TSFM) and butler thread can run to prepare exports.

This may fix an issue some windows users reported
"Cannot prepare transport for export", and increasing
the buffersize to 1024 or 2048 works around the isssue.

This also fixes an edge-case usecs_per_cycle() may return -1
(sleep forever) when the engine dies.
This commit is contained in:
Robin Gareus 2021-03-25 21:15:13 +01:00
parent fe99dd4ec2
commit 32c7b18f6d
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04

View File

@ -140,9 +140,11 @@ Session::start_audio_export (samplepos_t position, bool realtime, bool region_ex
* to wait for it to wake up and call
* non_realtime_stop ().
*/
int timeout = std::max (10, (int)(8 * nominal_sample_rate () / get_block_size ()));
int sleeptm = std::max (40000, engine().usecs_per_cycle ());
int timeout = std::max (100, 8000000 / sleeptm);
do {
Glib::usleep (engine().usecs_per_cycle ());
Glib::usleep (sleeptm);
sched_yield ();
} while (_transport_fsm->waiting_for_butler() && --timeout > 0);
if (timeout == 0) {