Repository navigation
Conversation
|
GOOD TO GO at |
be29223 to
06ae67a
Compare
|
Fix round:
Verdict stays good to go. |
|
NEEDS CHANGES at
A fix round is in progress. CI on this head is cancelled until then. |
…o lost (#2633) - On Python 3.9-3.12 asyncio's Process.kill polls through Popen.send_signal, reaping a tshark that exited before its SIGCHLD was handled; the child watcher reports 255 and pyshark's close raises TSharkCrashException (CPython gh-87744, fixed in 3.13). - PyShark.close logs that crash at DEBUG instead, only when the capture reached EOF and every listed tshark reports 255 to asyncio but 0 to the Popen that reaped it. A real failure, a 255 the Popen also read, or any other error still raises. The capture is emptied so its __del__ is quiet. - Stub pyshark.capture.capture, and list the 3.9 floor as UNRELATED in the RFC-constants sweep. New unit tests pair each absorbed crash with one that still raises, and lose real statuses. 3.12, 4x100 natural + 40 widened extractions: 97 crashes before, 0 after.
06ae67a to
b3346a3
Compare
|
Fix round and rebase:
GOOD TO GO at |
|
The red |
|
Coverage: 94.08% -- tests failure, so this is partial (unit tier, Python 3.15,
Per-file detail: the |
make pylint,make mypy,make isort)make testpasses, and a test case covers the changeWhat is the purpose of your pull request?
fix— a bug fixDescription of your pull request and other information
On Python 3.9–3.12,
extract(engine='pyshark')raised a spuriousTSharkCrashException: … retcode: 255. The cause is CPython gh-87744: asyncio'skill()goes throughPopen.poll(), which reaps an already-exited tshark, so asyncio reports 255. The owner chose option 1 on #2633, soPyShark.close()now absorbs the crash only under a strict version of that option's condition:TSharkCrashException, matched by class;Popenholds the real status, 0.It then logs at DEBUG, clears the stale processes and finishes pyshark's close.
Requiring the
Popen's 0 is stricter than "255 at EOF". pyshark sets EOF after a mid-stream crash too, and a truncated capture with a real exit 14 would otherwise be absorbed; it still raises. One residual case is documented: a genuine exit 255 that the watcher reaps first reads as 0. asyncio's ownUnknown child processwarning still prints, but the extraction succeeds.Evidence:
Closes #2633