From 1bf32450fd8395ab6ec597c18fbc5c2467148134 Mon Sep 17 00:00:00 2001 From: HueByte Date: Thu, 19 Feb 2026 12:25:16 +0100 Subject: [PATCH 1/2] fix: Improve shutdown process for IRC Gateway and Server Directory services --- src/EchoHub.Server.Irc/IrcGatewayService.cs | 15 +++++++++++---- .../Services/ServerDirectoryService.cs | 8 ++------ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/EchoHub.Server.Irc/IrcGatewayService.cs b/src/EchoHub.Server.Irc/IrcGatewayService.cs index 65c02ae..894f212 100644 --- a/src/EchoHub.Server.Irc/IrcGatewayService.cs +++ b/src/EchoHub.Server.Irc/IrcGatewayService.cs @@ -141,17 +141,24 @@ public sealed class IrcGatewayService : BackgroundService public override async Task StopAsync(CancellationToken cancellationToken) { + // Cancel ExecuteAsync first so listeners stop accepting + await base.StopAsync(cancellationToken); + + // Force-close any remaining client connections foreach (var (_, conn) in _connections) { try { - await conn.SendAsync("ERROR :Server shutting down"); - await conn.DisposeAsync(); + await conn.SendAsync("ERROR :Server shutting down") + .WaitAsync(TimeSpan.FromSeconds(2)); } catch { } + finally + { + try { await conn.DisposeAsync(); } + catch { } + } } _connections.Clear(); - - await base.StopAsync(cancellationToken); } } diff --git a/src/EchoHub.Server/Services/ServerDirectoryService.cs b/src/EchoHub.Server/Services/ServerDirectoryService.cs index f8734a9..9aa1e86 100644 --- a/src/EchoHub.Server/Services/ServerDirectoryService.cs +++ b/src/EchoHub.Server/Services/ServerDirectoryService.cs @@ -177,13 +177,9 @@ public sealed class ServerDirectoryService( public override async Task StopAsync(CancellationToken cancellationToken) { - if (_connection is not null) - { - await _connection.DisposeAsync(); - _connection = null; - } - + // Cancel ExecuteAsync first — it disposes the connection via await using await base.StopAsync(cancellationToken); + _connection = null; } /// From 4c192717def8ea8d944948a7dbbee25299ed058b Mon Sep 17 00:00:00 2001 From: HueByte Date: Thu, 19 Feb 2026 12:29:45 +0100 Subject: [PATCH 2/2] feat: Release v0.2.1 with shutdown and CI fixes --- docs/changelog/index.md | 1 + docs/changelog/toc.yml | 2 ++ docs/changelog/v0.2.1.md | 13 +++++++++++++ src/Directory.Build.props | 2 +- 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 docs/changelog/v0.2.1.md diff --git a/docs/changelog/index.md b/docs/changelog/index.md index f34555b..e090729 100644 --- a/docs/changelog/index.md +++ b/docs/changelog/index.md @@ -4,6 +4,7 @@ Release history for EchoHub. ## Releases +- [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 - [v0.1.0](v0.1.0.md) - Initial Release diff --git a/docs/changelog/toc.yml b/docs/changelog/toc.yml index b3b5122..031eebb 100644 --- a/docs/changelog/toc.yml +++ b/docs/changelog/toc.yml @@ -1,5 +1,7 @@ - name: Overview href: index.md +- name: v0.2.1 + href: v0.2.1.md - name: v0.2.0 href: v0.2.0.md - name: v0.1.1 diff --git a/docs/changelog/v0.2.1.md b/docs/changelog/v0.2.1.md new file mode 100644 index 0000000..28263d5 --- /dev/null +++ b/docs/changelog/v0.2.1.md @@ -0,0 +1,13 @@ +# v0.2.1 - Shutdown & CI Fixes + +## Fixes + +- Fixed server hanging on Ctrl+C when the directory server is unreachable — `StopAsync` now cancels background services before disposing connections +- Fixed IRC gateway shutdown blocking indefinitely on unresponsive clients — send operations are now bounded to 2 seconds +- Fixed CI release workflow not having full git history for building release notes (`fetch-depth: 0`) +- Fixed `workflow_dispatch` trigger breaking change detection when `github.event.before` is empty + +## Improvements + +- GitHub releases now include a commit list and version diff link instead of generic auto-generated notes +- GitHub releases link to the full changelog on the docs site diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 499303e..575345a 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,6 +1,6 @@ - 0.1.1 + 0.2.1 true $(NoWarn);CS1591