• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

penguinolog / urwid / 37029119262
86%
master: 86%

Build:
Build:
LAST BUILD BRANCH: fix-canvascache-leak
DEFAULT BRANCH: master
Ran 02 Oct 2026 03:45PM UTC
Jobs 11
Files 68
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

02 Oct 2026 03:43PM UTC coverage: 86.459%. First build
37029119262

push

github

penguinolog
Stop CanvasCache._deps keeping dead widgets alive

store() added each dependant to _deps[child] and nothing removed it until
the child itself was invalidated, so wrappers rebuilt around a cached child
(and GridFlow display widgets rebuilt on every focus change) were never freed.

- Add _children, the reverse of _deps, and drop a widget's links when its
  last cached canvas is collected or it is invalidated, and remove a child
  from its dependants' links when the child's own last canvas is collected.
- store() adds links only after the canvas is cached, so a cleanup callback
  running mid-store cannot strip them or leave them for an uncached canvas.
- cleanup() of a replaced canvas no longer removes the live entry stored
  under the same key.
- Raise a new CanvasError on each misuse of a finalized canvas: re-raising
  one shared instance grew its traceback and kept every failed call's
  canvas alive.

| what | avg time before | avg time after | percent change |
| --- | --- | --- | --- |
| urwid.Pile.render (50 children, one child changed per frame) | 195 us | 203 us | +4% |
| urwid.CanvasCache.invalidate + store + fetch (50-child Pile) | 15.4 us | 21.8 us | +42% |
| urwid.CanvasCache.store (50-child Pile) | 14.6 us | 16.2 us | +11% |

4676 of 5610 branches covered (83.35%)

Branch coverage included in aggregate %.

46 of 46 new or added lines in 1 file covered. (100.0%)

11689 of 13318 relevant lines covered (87.77%)

9.04 hits per line

Jobs
ID Job ID Ran Files Coverage
1 run-3.9-windows-latest - 37029119262.1 02 Oct 2026 03:47PM UTC 68
76.13
GitHub Action Run
2 run-3.14-ubuntu-latest - 37029119262.2 02 Oct 2026 03:45PM UTC 68
85.11
GitHub Action Run
3 run-3.9-ubuntu-latest - 37029119262.3 02 Oct 2026 03:46PM UTC 68
85.08
GitHub Action Run
4 run-3.13-ubuntu-latest - 37029119262.4 02 Oct 2026 03:46PM UTC 68
85.11
GitHub Action Run
5 run-3.11-windows-latest - 37029119262.5 02 Oct 2026 03:47PM UTC 68
76.17
GitHub Action Run
6 run-3.12-windows-latest - 37029119262.6 02 Oct 2026 03:47PM UTC 68
76.17
GitHub Action Run
7 run-3.13-windows-latest - 37029119262.7 02 Oct 2026 03:47PM UTC 68
76.17
GitHub Action Run
8 run-3.11-ubuntu-latest - 37029119262.8 02 Oct 2026 03:46PM UTC 68
85.11
GitHub Action Run
9 run-3.10-windows-latest - 37029119262.9 02 Oct 2026 03:47PM UTC 68
76.17
GitHub Action Run
10 run-3.12-ubuntu-latest - 37029119262.10 02 Oct 2026 03:46PM UTC 68
85.11
GitHub Action Run
11 run-3.10-ubuntu-latest - 37029119262.11 02 Oct 2026 03:46PM UTC 68
85.12
GitHub Action Run
Source Files on build 37029119262
  • Tree
  • List 68
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #37029119262
  • 7c42db4b on github
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc