mirror of
https://github.com/MarekWo/mc-webui.git
synced 2026-05-02 11:32:35 +02:00
Two near-simultaneous POSTs to /api/channels/join (observed 7 ms apart in demo-server logs) each found a different free slot and both succeeded, producing two entries for the same channel name on the device. This also shifted the sidebar so each channel rendered the next one's messages. - Wrap free-slot detection + set_channel in a module-level lock so concurrent requests serialize instead of racing. - Idempotency: if a channel with this name already exists, return the existing slot with already_existed=true instead of creating a duplicate. Applies to both POST /api/channels and /api/channels/join (skipped when caller targets an explicit index). - Disable submit buttons on create/join forms while a request is in flight, and guard against double-registration of the channel-link click delegate to stop a single click from firing N POSTs. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>