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

aio-libs / multidict / 35846507942
87%

Build:
DEFAULT BRANCH: master
Ran 23 Sep 2026 10:03AM 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 10:02AM UTC coverage: 87.376%. Remained the same
35846507942

push

github

web-flow
Drop the free-threaded Python 3.13 code path (#1524)

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

## What do these changes do?

Support for free-threaded Python 3.13 was dropped in v6.8.0 (#1326),
once cibuildwheel stopped building cp313t wheels, but the C extension
kept a second free-threaded code path for interpreters without
`PyUnstable_TryIncRef()`, of which 3.13t is the only one. It was never
built in CI, never tested, and it duplicated `md_get_one()` and the
`md_contains()` dispatch outright.

`Py_GIL_DISABLED` now implies CPython 3.14 or newer. That assumption is
enforced by an `#error` in `freethreading.h`, so a free-threaded build
on 3.13t fails with a clear compiler message instead of silently
compiling an untested lock-free path (the vendored
`pythoncapi_compat.h` polyfills those calls, so it would otherwise
build). `_MD_HAVE_TRYINCREF` and every branch keyed on it are gone.

Only the C extension is affected. The pure-Python backend is
version-agnostic and unchanged, and builds with the GIL enabled still
go down to Python 3.10.

## Are there changes in behavior for the user?

No, on every supported build. The disassembly of `_multidict.so` is
identical before and after on both a free-threaded 3.14t build and a
GIL build. On an unsupported free-threaded 3.13t interpreter, building
from source now fails at compile time rather than producing an
untested extension.

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

No, it removes code.

## Related issue number

None; follow-up cleanup after #1326.

## Checklist

- [x] I think the code is well written
- [x] Unit tests for the changes exist — N/A, no behaviour change; the
      existing free-threading tests cover the surviving path
- [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 an... (continued)

765 of 1530 branches covered (50.0%)

Branch coverage included in aggregate %.

7153 of 7532 relevant lines covered (94.97%)

1.9 hits per line

Jobs
ID Job ID Ran Files Coverage
1 MyPy - 35846507942.1 23 Sep 2026 10:03AM UTC 84
87.37
GitHub Action Run
Source Files on build 35846507942
  • 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 #35846507942
  • 690e43cf on github
  • Prev Build on master (#35844764317)
  • Next Build on master (#35851280448)
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