From c7bcc7c240d6aaa979a68c50693fae6360a6daf0 Mon Sep 17 00:00:00 2001 From: Extremesecrecy <10959169+extremesecrecy@users.noreply.github.com> Date: Sat, 26 Jul 2025 12:56:30 -0700 Subject: [PATCH] Reverting waits Waits are still overlapping. Will discuss with Robin for advice on how he wants to manage them. My attempt stopped the over lap but broke the loading. --- src/AudioHost.cpp | 6 +- src/PiPedalModel.cpp | 60 ++----------------- vite/src/pipedal/JackServerSettingsDialog.tsx | 38 ++++++------ 3 files changed, 27 insertions(+), 77 deletions(-) diff --git a/src/AudioHost.cpp b/src/AudioHost.cpp index 43d9bb6..9ab289a 100644 --- a/src/AudioHost.cpp +++ b/src/AudioHost.cpp @@ -2086,8 +2086,8 @@ public: virtual void UpdateServerConfiguration(const JackServerSettings &jackServerSettings, std::function 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); @@ -2364,4 +2364,4 @@ JSON_MAP_REFERENCE(JackHostStatus, cpuFreqMin) JSON_MAP_REFERENCE(JackHostStatus, cpuFreqMax) JSON_MAP_REFERENCE(JackHostStatus, hasCpuGovernor) JSON_MAP_REFERENCE(JackHostStatus, governor) -JSON_MAP_END() +JSON_MAP_END() \ No newline at end of file diff --git a/src/PiPedalModel.cpp b/src/PiPedalModel.cpp index 616bbf4..f45c396 100644 --- a/src/PiPedalModel.cpp +++ b/src/PiPedalModel.cpp @@ -1377,31 +1377,6 @@ void PiPedalModel::RestartAudio(bool useDummyAudioDriver) jackServerSettings.UseDummyAudioDevice(); } - - - - - - - - - - - - - - - - - - - - - - - - - auto jackConfiguration = this->jackConfiguration; jackConfiguration.AlsaInitialize(jackServerSettings); if (!jackConfiguration.isValid()) @@ -2772,31 +2747,6 @@ static bool HasAlsaDevice(const std::vector devices, const std:: return false; } - - - - - - - - - - - - - - - - - - - - - - - - - void PiPedalModel::StartHotspotMonitoring() { this->avahiService = std::make_unique(); @@ -3065,25 +3015,25 @@ void PiPedalModel::OnAlsaDriverTerminatedAbnormally() auto now = clock::now(); clock::duration timeSinceLastRetry = now-this->lastRestartTime; this->lastRestartTime = now; - if (timeSinceLastRetry > std::chrono::duration_cast(std::chrono::seconds(6))) { + if (timeSinceLastRetry > std::chrono::duration_cast(std::chrono::milliseconds(1000))) { audioRestartRetries = 0; } CancelAudioRetry(); if (audioRestartRetries == 0) { - this->audioRetryPostHandle = this->PostDelayed( - std::chrono::seconds(5), + this->audioRetryPostHandle = this->Post( + // 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::seconds(5), + std::chrono::milliseconds(100 * audioRestartRetries), [this]() { if (closed) { return; diff --git a/vite/src/pipedal/JackServerSettingsDialog.tsx b/vite/src/pipedal/JackServerSettingsDialog.tsx index 7feefc7..3afe0ea 100644 --- a/vite/src/pipedal/JackServerSettingsDialog.tsx +++ b/vite/src/pipedal/JackServerSettingsDialog.tsx @@ -240,7 +240,7 @@ function getBestBuffers( if (validBufferSizes.indexOf(32) !== -1) { validBufferSizes = [32, ...validBufferSizes.filter(v => v !== 32)]; } - + function tryPick(count: number): BufferSetting | undefined { for (let bs of validBufferSizes) { const counts = getValidBufferCountsMultiple(bs, inDevice, outDevice); @@ -275,14 +275,14 @@ function isOkEnabled(jackServerSettings: JackServerSettings, alsaDevices?: AlsaD { if (!alsaDevices) return false; if (!jackServerSettings.alsaInputDevice || !jackServerSettings.alsaOutputDevice) return false; - + const inDevice = alsaDevices.find(d => d.id === jackServerSettings.alsaInputDevice && d.supportsCapture); const outDevice = alsaDevices.find(d => d.id === jackServerSettings.alsaOutputDevice && d.supportsPlayback); if (!inDevice || !outDevice) return false; const sampleRates = intersectArrays(inDevice.sampleRates, outDevice.sampleRates); if (sampleRates.indexOf(jackServerSettings.sampleRate) === -1) return false; - + const deviceBufferSize = jackServerSettings.bufferSize * jackServerSettings.numberOfBuffers; const minSize = Math.max(inDevice.minBufferSize, outDevice.minBufferSize); const maxSize = Math.min(inDevice.maxBufferSize, outDevice.maxBufferSize); @@ -323,7 +323,7 @@ const JackServerSettingsDialog = withStyles( suppressDeviceWarning: boolean; originalJackServerSettings?: JackServerSettings; - + getFullScreen() { return document.documentElement.clientWidth < 420 || document.documentElement.clientHeight < 700; @@ -417,7 +417,7 @@ const JackServerSettingsDialog = withStyles( if (!outDevice) result.alsaOutputDevice = INVALID_DEVICE_ID; return result; } - + let sampleRates = intersectArrays(inDevice.sampleRates, outDevice.sampleRates); if (sampleRates.length !== 0 && sampleRates.indexOf(result.sampleRate) === -1) { let bestSr = sampleRates[0]; @@ -472,11 +472,11 @@ const JackServerSettingsDialog = withStyles( componentWillUnmount() { super.componentWillUnmount(); this.mounted = false; - this.stopStatusTimer(); - if (this.originalJackServerSettings) { - this.model.setJackServerSettings(this.originalJackServerSettings); - this.originalJackServerSettings = undefined; - } + this.stopStatusTimer(); + + + + } getSelectedDevice(deviceId: string): AlsaDeviceInfo | undefined { @@ -562,9 +562,9 @@ const JackServerSettingsDialog = withStyles( let s = this.state.jackServerSettings.clone(); s.valid = true; this.props.onApply(s); - // Prevent componentWillUnmount from reverting after the - // settings have been saved. - this.originalJackServerSettings = undefined; + + + }; handleWarningProceed() { @@ -619,18 +619,18 @@ const JackServerSettingsDialog = withStyles( const handleClose = () => { if (this.originalJackServerSettings) { this.model.setJackServerSettings(this.originalJackServerSettings); - this.originalJackServerSettings = undefined; + } onClose(); }; - + const sortedDevices = sortDevices(this.state.alsaDevices ?? []); let selectedInputDevice = this.getSelectedDevice(this.state.jackServerSettings.alsaInputDevice); let selectedOutputDevice = this.getSelectedDevice(this.state.jackServerSettings.alsaOutputDevice); - + const devicesSelected = (selectedInputDevice && selectedOutputDevice); - + let bufferSizes: number[] = devicesSelected ? getValidBufferSizesMultiple(selectedInputDevice, selectedOutputDevice) : []; let bufferCounts = devicesSelected ? @@ -641,7 +641,7 @@ const JackServerSettingsDialog = withStyles( intersectArrays(selectedInputDevice.sampleRates, selectedOutputDevice.sampleRates) : []; let sampleRateOptions = sampleRates.length === 0 && this.state.jackServerSettings.sampleRate ? [this.state.jackServerSettings.sampleRate] : sampleRates; - + return ( <>