From c054b27f628f23fecc505b9e09e78721738f3c4e Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Wed, 16 Sep 2026 13:52:58 -0400 Subject: fix: shutdown admission, recovery identity/order, rollback journal retention, pickup merge --- internal/game/hacking/liars_dice.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'internal/game/hacking/liars_dice.go') diff --git a/internal/game/hacking/liars_dice.go b/internal/game/hacking/liars_dice.go index 1dd27b6..8e21b94 100644 --- a/internal/game/hacking/liars_dice.go +++ b/internal/game/hacking/liars_dice.go @@ -175,7 +175,7 @@ func (l *LiarsDiceGame) doCall(player bool) (string, bool, bool) { } } - return l.checkGameOver(sb) + return l.checkGameOver(&sb) } func (l *LiarsDiceGame) doExact() (string, bool, bool) { @@ -202,10 +202,14 @@ func (l *LiarsDiceGame) doExact() (string, bool, bool) { l.playerLost++ } - return l.checkGameOver(sb) + return l.checkGameOver(&sb) } -func (l *LiarsDiceGame) checkGameOver(sb strings.Builder) (string, bool, bool) { +// checkGameOver resolves a completed challenge/exact exchange. The builder is +// passed BY POINTER: it already holds the resolution text, and copying a +// non-zero strings.Builder by value panics — a panic here runs on the game +// owner goroutine, which has no recovery, so it would terminate the server. +func (l *LiarsDiceGame) checkGameOver(sb *strings.Builder) (string, bool, bool) { if len(l.playerDice) == 0 { sb.WriteString("\nYou've lost all your fragments. Connection terminated.") l.gameOver = true -- cgit v1.2.3