Highlights
🐛 Fix userspace RSD tunnel teardown hanging the event loop
Closing a UserspaceRsdTunnel could time out in aclose(), later wedge the event loop's own
shutdown (e.g. pytest-asyncio hanging at teardown), and leak one parked rx_pump thread per
relayed connection. Three intertwined causes in the dial-plane relay are fixed: the client's EOF
is now propagated to the device as a TCP half-close so relays finish on their own, the blocking
PyTCP socket close was moved off the event loop thread, and rx_pump threads now terminate
instead of parking forever in recv(). Requires pmd-pytcp >= 0.0.6, which also fixes a
Windows-only TX Ring thread crash during stack shutdown. Fixes #1756.
tunnel = UserspaceRsdTunnel(serial=udid)
rsd = await tunnel.aopen()
...
await tunnel.aclose() # now returns promptly, no leaked threadsWhat's Changed
- e975bea requirements: floor pmd-pytcp at 0.0.6 (teardown fixes, #1756) (#1760) (@doronz88)
- 245b4bd userspace_tunnel: fix relay teardown hanging the event loop (#1756) (#1760) (@doronz88)
Full Changelog: v9.33.3...v9.33.4