aboutsummaryrefslogtreecommitdiff
path: root/internal/net
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-10-05 17:39:06 -0400
committerhistoria <[not public]>2026-10-05 17:39:06 -0400
commitec703a39738fefb60817f5659f76f8e683f8d301 (patch)
tree00d1242d9f94bc2fec48331d8c02909be6b37f7a /internal/net
parent516fd29da423432ef6dfded21a984f1d15dcab1a (diff)
downloadthehouseoficarus-ec703a39738fefb60817f5659f76f8e683f8d301.tar.gz
fix: admin undo/redo failure, video poker cabinet ids, room ref behavior
Diffstat (limited to 'internal/net')
-rw-r--r--internal/net/conn.go6
-rw-r--r--internal/net/server.go5
2 files changed, 10 insertions, 1 deletions
diff --git a/internal/net/conn.go b/internal/net/conn.go
index a4be83a..d8c867e 100644
--- a/internal/net/conn.go
+++ b/internal/net/conn.go
@@ -79,7 +79,11 @@ func (t *tcpConn) ReadMessage() (string, error) {
text = stripIAC(text)
text = truncateLine(text, maxLineLength)
if t.echoOff.Load() {
- t.conn.Write([]byte("\r\n"))
+ // Refresh the write deadline: the writer goroutine may have left a
+ // stale deadline in the past, which would silently drop this echo on
+ // an idle connection.
+ _ = t.conn.SetWriteDeadline(time.Now().Add(writeDeadline))
+ _, _ = t.conn.Write([]byte("\r\n"))
}
return text, nil
}
diff --git a/internal/net/server.go b/internal/net/server.go
index 71e34c8..8e23a1f 100644
--- a/internal/net/server.go
+++ b/internal/net/server.go
@@ -808,6 +808,11 @@ func (s *Server) Shutdown() {
if remaining <= 0 {
break
}
+ // Cap each wait so one stalled writer cannot consume the whole
+ // budget and starve every later session's flush.
+ if remaining > 200*time.Millisecond {
+ remaining = 200 * time.Millisecond
+ }
select {
case <-sess.writeDone:
case <-time.After(remaining):