Wait going mad.
Pressing ok/apply/refresh all were starting a cascade o waits. A restart request now cleans up any previous restart thread so multiple restarts cannot overlap
This commit is contained in:
@@ -2086,6 +2086,8 @@ public:
|
||||
virtual void UpdateServerConfiguration(const JackServerSettings &jackServerSettings,
|
||||
std::function<void(bool success, const std::string &errorMessage)> onComplete)
|
||||
{
|
||||
// Only allow one restart operation at a time.
|
||||
CleanRestartThreads(true);
|
||||
std::lock_guard guard(restart_mutex);
|
||||
RestartThread *pShutdown = new RestartThread(this, jackServerSettings, onComplete);
|
||||
restartThreads.push_back(pShutdown);
|
||||
|
||||
@@ -3015,24 +3015,25 @@ void PiPedalModel::OnAlsaDriverTerminatedAbnormally()
|
||||
auto now = clock::now();
|
||||
clock::duration timeSinceLastRetry = now-this->lastRestartTime;
|
||||
this->lastRestartTime = now;
|
||||
if (timeSinceLastRetry > std::chrono::duration_cast<clock::duration>(std::chrono::milliseconds(1000))) {
|
||||
if (timeSinceLastRetry > std::chrono::duration_cast<clock::duration>(std::chrono::seconds(6))) {
|
||||
audioRestartRetries = 0;
|
||||
}
|
||||
CancelAudioRetry();
|
||||
|
||||
if (audioRestartRetries == 0)
|
||||
{
|
||||
this->audioRetryPostHandle = this->Post(
|
||||
this->audioRetryPostHandle = this->PostDelayed(
|
||||
std::chrono::seconds(5),
|
||||
// No lock to avoid deadlocks!
|
||||
[this]() {
|
||||
Lv2Log::info("Restarting audio.");
|
||||
this->RestartAudio();
|
||||
});
|
||||
++audioRestartRetries;
|
||||
} else if (audioRestartRetries < 3)
|
||||
} else if (audioRestartRetries < 3)
|
||||
{
|
||||
this->audioRetryPostHandle = this->PostDelayed(
|
||||
std::chrono::milliseconds(100 * audioRestartRetries),
|
||||
std::chrono::seconds(5),
|
||||
[this]() {
|
||||
if (closed) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user