Skip to content

fix: make SocketConnectBlockedError pickleable - #501

Merged
miketheman merged 2 commits into
mainfrom
fix/pickleable-connect-error
Jun 30, 2026
Merged

miketheman merged 2 commits into
mainfrom
fix/pickleable-connect-error

Conversation

@miketheman

Copy link
Copy Markdown
Owner

Multiprocessing test runners (pytest-xdist, Django's --parallel) serialize exceptions across process boundaries. The default BaseException.__reduce__ replays self.args (the formatted message) through __init__, which expects (allowed, host) — so unpickling raised TypeError: __init__() missing 1 required positional argument: 'host', masking the real failure.

Store the constructor args and define __reduce__ so the exception reconstructs via its real __init__, preserving the structured API and the UserWarning. Add a regression test covering a pickle round-trip for both exception types.

Inspired by #265

Multiprocessing test runners (pytest-xdist, Django's `--parallel`)
serialize exceptions across process boundaries. The default
`BaseException.__reduce__` replays `self.args` (the formatted message)
through `__init__`, which expects `(allowed, host)` — so unpickling
raised `TypeError: __init__() missing 1 required positional argument:
'host'`, masking the real failure.

Store the constructor args and define `__reduce__` so the exception
reconstructs via its real `__init__`, preserving the structured API and
the UserWarning. Add a regression test covering a pickle round-trip for
both exception types.

Inspired by #265

Signed-off-by: Mike Fiedler <miketheman@gmail.com>
@miketheman miketheman added the bug Something isn't working label Jun 29, 2026
@codspeed

codspeed Bot commented Jun 29, 2026 •

Copy link
Copy Markdown
Contributor

Merging this PR will degrade performance by 32.43%

⚠️ Different runtime environments detected

Some benchmarks with significant performance changes were compared across different runtime environments,
which may affect the accuracy of the results.

Open the report in CodSpeed to investigate

❌ 1 (👁 1) regressed benchmark
✅ 11 untouched benchmarks

Performance Changes

Benchmark BASE HEAD Efficiency
👁 test_bench_host_from_address 8.5 µs 12.5 µs -32.43%

Comparing fix/pickleable-connect-error (723f6f7) with main (7bfe8f9)

Open in CodSpeed

@miketheman
miketheman merged commit 2bf8608 into main Jun 30, 2026
29 checks passed
@miketheman
miketheman deleted the fix/pickleable-connect-error branch June 30, 2026 21:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant