GeezerVison is showing github.com — Bump multidict from 6.7.1 to 6.9.1 by dependabot[bot] · Pull Request #64 · transloadit/python-sdk
Conversation
Bumps multidict from 6.7.1 to 6.9.1.
Release notes
Sourced from multidict's releases.
6.9.1
Bug fixes
-
Fixed the C extension reading freed memory on free-threaded builds when a
list handed to :py:meth:~multidict.MultiDict.update,
:py:meth:~multidict.MultiDict.extend, :py:meth:~multidict.MultiDict.merge
or the :py:class:~multidict.MultiDict and :py:class:~multidict.CIMultiDict
constructors, a [key, value] item inside any iterable handed to them, or a
list tested with in against :py:meth:~multidict.MultiDict.items, is
changed by another thread; a call that catches the list shrinking under it
now raises :py:exc:RuntimeError -- by :user:rodrigobnogueira.
Related issues and pull requests on GitHub:
#1437.
-
Fixed a data race on the free-threaded build where a retired hash table's
reader count used relaxed atomics, letting a lock-free get()/getone()/
__getitem__() read race a concurrent free of that table. The reader-exit
decrement and the drain's free check now use release/acquire ordering
instead -- by :user:asvetlov.
Related issues and pull requests on GitHub:
#1481.
-
Fixed a free-threaded build bug where two threads calling update(),
merge(), or __setitem__() on the same key at the same time could lose
the key entirely instead of just racing on which value wins. A decref of the
replaced value could transiently suspend the writer's critical section,
letting a second writer for the same key observe the first writer's
in-progress entry as absent and, once both settled, mistake it for a stale
duplicate and delete it. Every such decref is now deferred until the writer
has released its critical section, so the window can no longer open.
setdefault() had an unrelated instance of the same blind spot (it could
insert a duplicate rather than recognizing an in-flight key), fixed alongside
it -- by :user:asvetlov.
Related issues and pull requests on GitHub:
#1483.
-
Fixed a free-threaded build bug where getall() and the items()/
keys()/values() equality path could raise KeyError or report a
present, never-deleted key as missing. A concurrent update()/extend()/
__setitem__() call can have its critical section transiently suspended
(a decref triggering a blocking allocator call) while an entry is marked as
part of its own bookkeeping; a reader landing in that window used to treat
the mark as "not found" instead of "still there, in flight" -- by
:user:asvetlov.
Related issues and pull requests on GitHub:
... (truncated)
Changelog
Sourced from multidict's changelog.
6.9.1
(2026-09-21)
Bug fixes
-
Fixed the C extension reading freed memory on free-threaded builds when a
list handed to :py:meth:~multidict.MultiDict.update,
:py:meth:~multidict.MultiDict.extend, :py:meth:~multidict.MultiDict.merge
or the :py:class:~multidict.MultiDict and :py:class:~multidict.CIMultiDict
constructors, a [key, value] item inside any iterable handed to them, or a
list tested with in against :py:meth:~multidict.MultiDict.items, is
changed by another thread; a call that catches the list shrinking under it
now raises :py:exc:RuntimeError -- by :user:rodrigobnogueira.
Related issues and pull requests on GitHub:
:issue:1437.
-
Fixed a data race on the free-threaded build where a retired hash table's
reader count used relaxed atomics, letting a lock-free get()/getone()/
__getitem__() read race a concurrent free of that table. The reader-exit
decrement and the drain's free check now use release/acquire ordering
instead -- by :user:asvetlov.
Related issues and pull requests on GitHub:
:issue:1481.
-
Fixed a free-threaded build bug where two threads calling update(),
merge(), or __setitem__() on the same key at the same time could lose
the key entirely instead of just racing on which value wins. A decref of the
replaced value could transiently suspend the writer's critical section,
letting a second writer for the same key observe the first writer's
in-progress entry as absent and, once both settled, mistake it for a stale
duplicate and delete it. Every such decref is now deferred until the writer
has released its critical section, so the window can no longer open.
setdefault() had an unrelated instance of the same blind spot (it could
insert a duplicate rather than recognizing an in-flight key), fixed alongside
it -- by :user:asvetlov.
Related issues and pull requests on GitHub:
:issue:1483.
-
Fixed a free-threaded build bug where getall() and the items()/
keys()/values() equality path could raise KeyError or report a
present, never-deleted key as missing. A concurrent update()/extend()/
__setitem__() call can have its critical section transiently suspended
(a decref triggering a blocking allocator call) while an entry is marked as
... (truncated)
Commits
0a1770c Release 6.9.1 (#1504)
d220522 Upload release assets one at a time to avoid the secondary rate limit (#1503)
30cd596 Stop a GIL-releasing del from segfaulting the standard C extension build ...
d1c331a Recheck the reader gate after taking the retired list (#1502)
b37f07c Allocate deferred decrefs in fixed-size blocks (#1501)
563f667 Run CodSpeed benchmarks on Python 3.14 and loop the smallest ones (#1498)
157c87c Cancel superseded CI runs on pull requests (#1500)
d43adfe Drop -I from the ASan test command so PYTHONMALLOC takes effect (#1499)
2a68472 Stop items() iteration from reading a freed entry in CIMultiDict (#1496)
cd528d6 Rename GHSA-54p9-h82j-f925 changelog fragment to the merged commit (#1495)
- Additional commits viewable in compare view

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase will rebase this PR
@dependabot recreate will recreate this PR, overwriting any edits that have been made to it
@dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
@dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
@dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
@dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the Security Alerts page.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Assignees
No one assigned
Labels
dependencies
Pull requests that update a dependency file
python
Pull requests that update python code
Milestone
No milestone
Development
Successfully merging this pull request may close these issues.
Uh oh!
There was an error while loading. Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
|