Nimblesite / Nimblesite/SharpLsp
SidecarHost.MessageLoopAsync hot-loops on persistent transport exceptions
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 132
- Forks
- 5
- Avg merge
- 6h 24m
- Merged PRs (30d)
- 27
Description
MessageLoopAsync catches Exception, logs, and continues (sidecars/SharpLsp.Sidecar.Common/SidecarHost.cs lines ~110–113). A transport broken mid-write (e.g. pipe peer died) leaves the stream permanently broken, so every subsequent ReadFrameAsync throws IOException instead of returning the null EOF sentinel (FramedTransport.cs) — yielding a 100%-CPU, log-flooding loop. If the host died without kill_on_drop taking effect, the sidecar survives as a hot zombie.
Proposed: treat IOException/ObjectDisposedException as fatal (break the loop), or cap consecutive failures before exiting.
Related: #110 (same subsystem), and the orphaned-process cleanup work in #133.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in sidecars/SharpLsp.Sidecar.Common/SidecarHost.cs around MessageLoopAsync and its exception handler, then inspect FramedTransport.cs to understand the IOException path versus the null EOF sentinel. Ensure a broken transport exits or otherwise stops repeated failures, so a dead host cannot leave the sidecar in a hot logging loop.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 72/100