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

aio-libs / multidict / 35853118928
87%

Build:
DEFAULT BRANCH: master
Ran 23 Sep 2026 11:12AM UTC
Jobs 1
Files 42
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

23 Sep 2026 11:11AM UTC coverage: 87.432% (-0.005%) from 87.437%
35853118928

push

github

web-flow
Merge the deferred-decref accumulator into reflist_t (#1530)

<!-- Thank you for your contribution! -->

## What do these changes do?

The C extension carried two collectors of strong references that differ
only in how they are drained: `reflist_t` turned them into a list,
`deferred_decref_t` decref'd them. Both exist for the same reason,
that neither job can run while a critical section is held, and both
were filled by an almost identical push. They are now one type in
`_multilib/reflist.h`, built on the deferred accumulator's chain of
blocks, and `deferred_decref.h` is gone.

The inline array that starts the chain is small, 15 slots: it sits in
the caller's stack frame, and a bigger one costs `md_get_all()` its
inlining into the calling method. Everything past it is a 127 slot heap
block, and every path that touches a block is kept out of line, so a
call that never overflows compiles to roughly what the old plain array
did while a call that does overflow stops copying its refs to ever
bigger buffers. `getall()` and `popall()` on keys with many values come
out a few percent ahead; see the numbers below.

Pure Python is untouched: `reflist_t` is a C-side implementation
detail with no counterpart in `_multidict_py.py`.

## Are there changes in behavior for the user?

No. The collected references are still handed back in push order, and
both drains keep the ownership rules they had.

## Is it a substantial burden for the maintainers to support this?

No, it is one header and one push path fewer to keep in sync.

## Related issue number

None.

## Checklist

- [x] I think the code is well written
- [x] Unit tests for the changes exist
- [x] Documentation reflects the changes
- [ ] If you provide code modification, please add yourself to
`CONTRIBUTORS.txt` N/A, no such file in this repo
- [x] Add a new news fragment into the `CHANGES/` folder
- [x] `make doc-spelling` passes and any new technical words are added
to `docs/spelling_wordlist.txt`

Drafted wi... (continued)

765 of 1530 branches covered (50.0%)

Branch coverage included in aggregate %.

3 of 4 new or added lines in 1 file covered. (75.0%)

7221 of 7604 relevant lines covered (94.96%)

1.9 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
93.23
-0.03% tests/test_multidict.py
Jobs
ID Job ID Ran Files Coverage
1 MyPy - 35853118928.1 23 Sep 2026 11:12AM UTC 84
87.43
GitHub Action Run
Source Files on build 35853118928
  • Tree
  • List 42
  • Changed 3
  • Source Changed 1
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #35853118928
  • d4171b92 on github
  • Prev Build on master (#35851280448)
  • Next Build on master (#35853788758)
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