4 Commits
Author SHA1 Message Date
gitea-adminandClaude Fable 5.1 72d594033e Stop cancelled remote queries without blocking the selector
RemoteQueryPool.cancel() terminated the SSH process and then waited up
to 250 ms for it, on the curses thread. Ctrl+R re-enqueues every host,
so a refresh of six hosts could freeze the popup for over a second.

Only send SIGTERM when cancelling; reap the process on later polls,
escalating to SIGKILL after 250 ms and closing its pipes once it has
exited. close() still waits, since the popup is exiting anyway.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 03:04:27 +00:00
gitea-adminandClaude Fable 5.1 3f11734ce4 Decode streamed update output at character boundaries
The update popup kept the last 64 KiB of raw bytes and decoded the
whole buffer on every refresh. Cutting the buffer, or reading a chunk
that ended inside a multi-byte sequence, made the UTF-8 decode fail and
sent everything through the GB18030 fallback, garbling the display.

Clip the retained tail at a UTF-8 boundary and decode still-growing
streams with an incremental decoder that holds back an incomplete
trailing sequence instead of treating it as corruption.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 03:00:09 +00:00
gitea-admin 02d83a04bd Improve remote session management and Windows support 2026-09-03 12:58:24 +00:00
gitea-admin 6c2c9672e1 Initial release of herdr session switcher 2026-09-02 01:33:38 +00:00