Follow kitty's placement identity and lifetime rules #87
No reviewers
Labels
No labels
Area/ci
Area/cli
Area/client
Area/client-core
Area/daemon
Area/deps
Area/docs
Area/grid
Area/manual
Area/nix
Area/protocol
Area/pty
Area/render
Area/shaping
Area/skills
Area/transport
Area/vt
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Performance
Kind/Security
Kind/Testing
perf-regression-accepted
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Blocked
Status
Need More Info
Status
Upstream
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
felis-terminal/felis!87
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/idless-placements"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #78. Closes #79.
The alternate screen is out of scope: felis shares one image store between screens where kitty keeps one per screen, which is #89. The placement table's size bound is #88.
daemon, grid: delete an image's placements when it is transmitted again. Re-transmitting under a live image id left its placements on screen showing the new pixels, with no ref pinning the image; kitty deletes them (
free_refs_data). Re-placing under the same(i, p)also took a second ref while replacing the placement, pinning the image after it was deleted. Both are stated as one property over puts, deletes and re-transmits against a model, with every live placement holding exactly one ref.grid, daemon: give each Kitty placement without p= a placement of its own. The table kept one id-less slot per image, so placing an image twice without
p=moved the first copy; kitty replaces only under a non-zerop=.p=, orp=0) gets an id counted down fromu32::MAX, like an unnamed image's id, and is marked anonymous. The wire and client shadow key on(image, placement id)and need no change.p=addresses an anonymous placement: named puts and deletes skip it, and a named put landing on its id first moves it to a fresh one at the end of the table (announced as a remove and a re-place, which the client appends).p=0counts as one withoutp=;p=on an image sent withouti=/I=is ignored; the reply echoesp=only when non-zero.p=0andu32::MAXids; each of the four fixes above was removed by hand and the property failed every time.daemon: free an image on an uppercase delete only once it is unplaced.
d=Iwithp=and thed=P/Q/X/Y/Z/C/Rpredicates freed the image even when other placements still used it, orphaning them; kitty'sfilter_refsfrees only once no refs remain. The property gainsd=Iand tracks whether the image is still stored.Verification
a=p,i=1,c=10,r=5,C=1at different cells draw two copies, as in kitty; before, one.the_mirror_keeps_the_daemons_placement_orderships every step to a client shadow and checks it holds the daemon's placements in the daemon's order.just checkpasses apart from sixfelis-shapingtests that fail onmaintoo on this host (pinned font files missing).3eaf4ad68b70f4138d37Give each Kitty placement without p= a placement of its ownto Follow kitty's placement identity and lifetime rules70f4138d37b022cb0eeab022cb0eea34f217e80c34f217e80c13cf708741