summaryrefslogtreecommitdiff
path: root/docs/src/guide/patch-notes
diff options
context:
space:
mode:
authorSho Sakuma <me@m1sk9.dev>2026-08-05 03:31:52 +0900
committerSho Sakuma <me@m1sk9.dev>2026-08-05 03:31:52 +0900
commitc939f879f388f07f00e017f59685276aa7a9faef (patch)
tree0c67f359da3f39c9023b1261ab5e963e3a1a643a /docs/src/guide/patch-notes
parent7c544224291e8ed7e23dcf97ea3cc6f42588c338 (diff)
downloadLunaticChat-c939f879f388f07f00e017f59685276aa7a9faef.tar.gz
LunaticChat-c939f879f388f07f00e017f59685276aa7a9faef.tar.bz2
LunaticChat-c939f879f388f07f00e017f59685276aa7a9faef.zip
fix: keep a slow Google IME reply from killing a delivery queue
withTimeout reports a timeout as a CancellationException, which callers must rethrow rather than degrade. With api.timeout below convertWithRomaji's budget the client's timeout therefore travelled through convertWord, through withTimeoutOrNull - which rethrows a timeout belonging to another coroutine - and into the queue worker, which read it as shutdown and ended its loop. The channel stayed registered with nothing reading it, so every later message from that player was buffered and never delivered: exactly the failure the worker's own guard exists to prevent. A timeout is now an ordinary exception, so cancellation once again means only cancellation. The concurrency limiter also no longer covers the cache lookup. Its four permits are shared by the whole server and held for a full round trip, so cached words queued behind in-flight requests for a permit they did not need and a message whose every word was cached could still exhaust the caller's budget and go out unconverted. Co-Authored-By: Claude <noreply@anthropic.com>
Diffstat (limited to 'docs/src/guide/patch-notes')
0 files changed, 0 insertions, 0 deletions