mirror of
https://github.com/wez/wezterm.git
synced 2024-11-29 21:44:24 +03:00
A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
6fdae9b226
I was running `hg log --config pager.pager=sp` and pressing space without releasing it. After about 10k lines sp appears to deadlock. It seems sp uses a single thread for both reading terminal events and sending wake events and it sends too many wake events without reading the events. Failing to write to the wake pipe due to EWOULDBLOCK does not seem to be a problem - there are enough events in the pipe to wake up the other side. Therefore let's just make wake_pipe_write nonblocking and treat EWOULDBLOCK as a success. Context: The stuck thread looks like: #0 0x00007f32671ee237 in write () from /usr/lib/libc.so.6 #1 0x000055c466022823 in std::sys::unix::fd::FileDesc::write () at src/libstd/sys/unix/fd.rs:96 #2 std::sys::unix::net::Socket::write () at src/libstd/sys/unix/net.rs:276 #3 <&std::sys::unix::ext::net::UnixStream as std::io::Write>::write () at src/libstd/sys/unix/ext/net.rs:597 #4 <std::sys::unix::ext::net::UnixStream as std::io::Write>::write () at src/libstd/sys/unix/ext/net.rs:582 #5 0x000055c465d010a6 in termwiz::terminal::unix::UnixTerminalWaker::wake (self=0x7ffe6bd32de0) at /home/quark/.cargo/git/checkouts/wezterm-6425bab852909cc8/ef1b836/termwiz/src/terminal/unix.rs:278 #6 0x000055c465a6c64b in streampager::event::EventSender::send_unique (self=0x7ffe6bd32dd0, event=..., unique=0x7ffe6bd32de8) at src/event.rs:66 #7 0x000055c465a7e65a in streampager::display::start (term=..., term_caps=..., events=..., files=..., error_files=..., progress=..., mode=streampager::config::FullScreenMode::Auto) at src/display.rs:295 #8 0x000055c465a453a7 in streampager::Pager::run (self=...) at src/lib.rs:171 #9 0x000055c465a0aced in sp::open_files (args=...) at src/bin/sp/main.rs:170 #10 0x000055c465a08e4f in sp::main () at src/bin/sp/main.rs:25 |
||
---|---|---|
.cargo | ||
.github | ||
assets | ||
base91 | ||
ci | ||
deps | ||
docs | ||
promise | ||
pty | ||
rangeset | ||
src | ||
tabout | ||
term | ||
termwiz | ||
vtparse | ||
window | ||
.gitignore | ||
.gitmodules | ||
.rustfmt.toml | ||
build.rs | ||
Cargo.lock | ||
Cargo.toml | ||
CONTRIBUTING.md | ||
get-deps | ||
install.sh | ||
LICENSE.md | ||
README.md | ||
wt-record | ||
wt-replay |
Wez's Terminal
A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
User facing home page at: https://wezfurlong.org/wezterm/
Screenshot of wezterm on macOS, running vim
Installation
https://wezfurlong.org/wezterm/installation.html
Getting help
This is a spare time project, so please bear with me. There are two channels for support:
- You can use the GitHub issue tracker to see if someone else has a similar issue, or to file a new one: https://github.com/wez/wezterm/issues
- There is a gitter room for (potentially!) real time discussions: https://gitter.im/wezterm/Lobby
The gitter room is probably better suited to questions than it is to bug reports, but don't be afraid to use whichever you are most comfortable using and we'll work it out.