alpha
Login
or
Join now
snowytrees.dev
/
emacs-config
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Literate and reproducible emacs config using twist.nix
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Overview
Issues
Pulls
Pipelines
emacs-config
/
nix
/
ghostel
/
at
master
2 files
Jordan Isaacs
ghostel: flush event pipe outside term_mutex to fix daemon deadlock
5w ago
94901458
build.zig.zon2json-lock
ghostel: bump 0.27.0 -> 0.36.0, drop TTY cursor patch Upstream rewrote cursor handling, moving control to Elisp (ghostel--apply-cursor-style); a hidden cursor now maps to cursor-type nil, structurally avoiding the TTY inverse-cell double-inversion the local patch worked around. The patched Zig code path no longer exists, so drop the patch entirely. - flake.lock: ghostel -> 2479c15 (0.36.0); bump zig2nix - flake.nix: ghostelModule.version -> 0.36.0; ghostelSrc is now plain inputs.ghostel (no applyPatches); refresh comments - lock/flake.lock: bump twist's separate ghostel pin so the new lisp/*.el (ghostel-comint/ime/kitty) are resolved and compiled - nix/ghostel/build.zig.zon2json-lock: regenerate for the libghostty bump - init.org: drop stale ghostel--scroll-positions comment reference Builds verified: .#ghostelModule and .#packages.x86_64-linux.default.
1 month ago
event-pipe-nonblocking-flush.patch
ghostel: flush event pipe outside term_mutex to fix daemon deadlock The per-terminal reader thread held term_mutex while doing a blocking write() to the Emacs event pipe. When the display client stopped draining that pipe -- e.g. an emacsclient suspended inside an Eternal Terminal session that was slept -- the 64 KiB pipe filled, the reader blocked in the write holding term_mutex, and the main thread deadlocked waiting for term_mutex (needed for redisplay / the event filter), wedging the whole daemon. Reproduced live; draining the pipe was the only recovery. Carry a local patch (nix/ghostel/event-pipe-nonblocking-flush.patch), applied to ghostelSrc via pkgs.applyPatches, that: - flushes events OUTSIDE term_mutex with non-blocking writes, so the reader never blocks while holding the lock the main loop needs to drain the pipe, and keeps draining the child PTY while the client is slow; - backs events with a pooled FIFO of fixed blocks (one form per node, new src/event_buffer.zig) so the hot path stays allocation-free and the backlog can be dropped form-aware -- never truncating a form mid-wire, which would desync Emacs' incremental reader -- when a suspended client falls far behind; - restores blocking mode for the reaper's final exit-status write. Builds clean under zig 0.15.2 (ReleaseFast); EventBuffer unit tests pass. Runtime suspend repro still pending a daemon running the new module.
1 month ago