Self-hosted SSH + SFTP + RDP in a browser — MobaXterm replacement
Root cause: The output reader loop held Arc<TokioMutex<Channel>> while calling ch.wait().await. After the initial prompt rendered and the server went idle, wait() blocked indefinitely holding the lock. ssh_write() could never acquire the mutex to send keystrokes. Permanent deadlock. Fix: Separated read/write paths. The output loop now owns the Channel exclusively via tokio::select!, receiving resize/shutdown commands through an mpsc channel. Writes go through Handle::data(channel_id, data) which bypasses the Channel entirely — no shared mutex, no deadlock. Also killed all compiler warnings (unused imports in rdp module). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .gitea/workflows | ||
| docs | ||
| src | ||
| src-tauri | ||
| .gitignore | ||
| CLAUDE.md | ||
| index.html | ||
| package-lock.json | ||
| package.json | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||