fix: resolve meteor WebSocket race condition and setup apt-get failure

Meteor: onopen callback used closure variable _ws instead of `this`,
so a double-click during CONNECTING state sent on the wrong socket.
Also clean up any in-progress connection on re-start, not just running ones.

Setup: make apt-get update non-fatal so third-party repo errors
(e.g. stale PPAs on Debian) don't abort the entire install.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Smittix
2026-03-02 21:48:56 +00:00
parent 63994ec1d4
commit 6a334c61df
2 changed files with 10 additions and 3 deletions

View File

@@ -1370,7 +1370,10 @@ install_debian_packages() {
CURRENT_STEP=0
progress "Updating APT package lists"
$SUDO apt-get update -y >/dev/null
if ! $SUDO apt-get update -y >/dev/null 2>&1; then
warn "apt-get update reported errors (possibly from third-party repos on your system)."
warn "Continuing anyway — if package installs fail, check your APT sources."
fi
progress "Installing RTL-SDR"
if ! $IS_DRAGONOS; then

View File

@@ -88,7 +88,7 @@ const MeteorScatter = (function () {
}
function start() {
if (_running) stop();
if (_running || _ws) stop();
const freq = parseFloat(document.getElementById('meteorFrequency')?.value) || 143.05;
const gain = parseFloat(document.getElementById('meteorGain')?.value) || 0;
@@ -126,9 +126,13 @@ const MeteorScatter = (function () {
}
_ws.onopen = function () {
// Guard against race: if start() was called again before this
// connection opened, _ws now points to a different socket.
if (_ws !== this) { try { this.close(); } catch (e) { /* */ } return; }
_running = true;
_updateUI();
_ws.send(JSON.stringify({
this.send(JSON.stringify({
cmd: 'start',
frequency_mhz: freq,
gain: gain === 0 ? 'auto' : gain,