ebkalderon / tower-lsp

Language Server Protocol implementation written in Rust
Apache License 2.0
952 stars 54 forks source link

Replace stream::select to stream_select! #414

Open blmarket opened 4 months ago

blmarket commented 4 months ago

futures::stream::select will poll streams in a round-robin fashion, which means one stream can be blocked if the other stream does not have item ready.

It replaces select to futures::stream_select! which just poll stream whichever comes first.

Reference: https://docs.rs/futures/latest/futures/stream/fn.select.html Reference: https://docs.rs/futures/latest/futures/macro.stream_select.html

Note: current master branch is broken and need to apply #406 first.


Demo of bug: https://github.com/blmarket/tower-lsp/blob/buggy-example/tests/buggy.rs

Without patch - it hangs if there are 3 or more logs. It runs okay if we comment out 1 or 2 logs. With patch - it run okay regardless of number of logs

blmarket commented 2 weeks ago

3 months with no update, so ping here. will ping again next year.