From 328821cd14ee4cb658d79a9c1bbbe6e485d14a0e Mon Sep 17 00:00:00 2001 From: HueByte Date: Thu, 19 Feb 2026 14:45:14 +0100 Subject: [PATCH] refactor: Update changelog for v0.2.2 to reflect startup and shutdown fixes, and standardize constructor injection --- docs/changelog/index.md | 2 +- docs/changelog/v0.2.2.md | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/changelog/index.md b/docs/changelog/index.md index 3967dfa..a15eed2 100644 --- a/docs/changelog/index.md +++ b/docs/changelog/index.md @@ -4,7 +4,7 @@ Release history for EchoHub. ## Releases -- [v0.2.2](v0.2.2.md) - Shutdown Fix +- [v0.2.2](v0.2.2.md) - Startup & Shutdown Fixes - [v0.2.1](v0.2.1.md) - Shutdown & CI Fixes - [v0.2.0](v0.2.0.md) - IRC Gateway - [v0.1.1](v0.1.1.md) - Directory Connection Self-Healing diff --git a/docs/changelog/v0.2.2.md b/docs/changelog/v0.2.2.md index 1c99749..b63c869 100644 --- a/docs/changelog/v0.2.2.md +++ b/docs/changelog/v0.2.2.md @@ -1,7 +1,14 @@ -# v0.2.2 - Shutdown Fix +# v0.2.2 - Startup & Shutdown Fixes ## Fixes -- Actually fixed server hanging on Ctrl+C — replaced `await using` with explicit dispose bounded to 3 seconds, so a stuck `HubConnection` can no longer block shutdown +- Fixed server hanging on startup when IRC gateway is enabled — circular DI dependency between `IrcGatewayService` → `IChatService` → `IChatBroadcaster` → `IrcBroadcaster` caused the DI container to deadlock +- Fixed `SignalRBroadcaster` eagerly resolving `IHubContext` during DI construction, which could deadlock on some platforms — now lazy-resolves via `IServiceProvider` on first use +- Simplified IRC service registration to use standard `AddSingleton` instead of manual factory, breaking the circular resolution chain +- Fixed server hanging on Ctrl+C — replaced `await using` with explicit dispose bounded to 3 seconds, so a stuck `HubConnection` can no longer block shutdown - Reduced host shutdown timeout from 30s (default) to 5s - Caught `OperationCanceledException` in the directory service reconnect loop so cancellation exits immediately instead of propagating through dispose + +## Refactoring + +- Replaced primary constructors with standard constructor injection across all server classes for consistency