v5.2: stability and polish — deep-audit bug fixes + install-flow fixes
Verified findings from a multi-dimension code audit, plus the two install-flow bugs: - Fix Opus encoder use-after-free on a codec/rate change while streaming (guard swap vs encode). - Fix "both" single-file recording dropping audio + drifting (drain both directions in lockstep). - Fix broken clip counter, UPnP teardown on exit, auto-update-restart foreground grant, and a malformed-Opus-format packet orphaning a playout session forever. - Post-install relaunch now respects start-minimised; uninstall is path-aware so it won't clear a different copy's run-at-startup. - Perf/hygiene: cache AppConfig off UI hot paths, fold per-peer EQ+gain into one pass, deterministic disposal (tray menu, timers, COM shortcut, Process handles, process meter), ring-buffer overflow guard, receiver session-lock fix, remote-control allow-list moved onto the UI thread. - Remove dead code (two IsAsioBackend, SessionPlayout.Reset, IsSameEndpoint, RemSoundUpdater IDisposable); several stale-doc fixes. Deferred (not in this release): drift-estimator tweak, peer-discovery pruning, uninstall retry-loop, encryption nonce. Wire format unchanged (interops v3.3-v5.1). Version -> 5.2. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
7038fef67c
commit
2fb9274a95
@@ -30,7 +30,7 @@ namespace RemSound.App;
|
||||
/// single canonical release stream, not to be re-pointed at a fork. If you need to publish
|
||||
/// from a different repo, change <see cref="RepoOwner"/> / <see cref="RepoName"/>.
|
||||
/// </summary>
|
||||
internal sealed class RemSoundUpdater : IDisposable
|
||||
internal sealed class RemSoundUpdater
|
||||
{
|
||||
public const string RepoOwner = "Ednunp";
|
||||
public const string RepoName = "RemSound";
|
||||
@@ -51,11 +51,6 @@ internal sealed class RemSoundUpdater : IDisposable
|
||||
|
||||
public string CurrentVersion => Assembly.GetExecutingAssembly().GetName().Version?.ToString(3) ?? "0.0.0";
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
// HttpClient is static and shared across the process; nothing to dispose here.
|
||||
}
|
||||
|
||||
/// <summary>Hit the GitHub Releases API, parse the latest release, return a struct
|
||||
/// describing what was found. Returns null if the request fails (network down, rate
|
||||
/// limited, repo not found) or if the latest version is not newer than the running
|
||||
@@ -259,7 +254,7 @@ internal sealed class RemSoundUpdater : IDisposable
|
||||
}
|
||||
|
||||
Log?.Invoke($"updater: launching in-app installer from {appRoot}, parent PID {pid}");
|
||||
System.Diagnostics.Process.Start(psi);
|
||||
using (System.Diagnostics.Process.Start(psi)) { }
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
Reference in New Issue
Block a user