Repository navigation
ComfyUI Base 3.20.1
ComfyUI Base 3.20.1: the testbed names a port's holder on Linux without lsof (#37)
Workspace integration run 39045535460 (job `workspace`, on the free
`soulcraft-hf` runner, a Hugging Face CPU Space container) failed two
base unit tests in `suite/test_newest.py`:
`test_unit_testbed_stops_only_the_server_it_started_and_refuses_a_foreign_port`
(line 482): expected `port N is already in use by pid `, got
`pid ?`.
`test_unit_testbed_owned_names_only_its_own_server_and_each_run_folder_gets_its_own`
(line 530): got `is held by pid ?, which this testbed did not start`.
Cause: that container has no `lsof`, and `testbed.sh`'s
`port_holders` answered `?` for any port that accepts a connection
when lsof is missing. GitHub's ubuntu runners have lsof, so the base's
own CI passed.
Change
- `testbed.sh`: `port_holders` tries lsof, then (Linux) a new
`proc_port_holders`: the LISTEN rows (st `0A`) of `/proc/net/tcp`
and `tcp6` for the port give socket inodes, and one `ls -l
/proc/[0-9]*/fd` gives the pids whose fds link those inodes (every
process of this user, no extra tools, busybox-safe). `?` remains only
for a port that answers when neither lsof nor /proc can name the holder.
An lsof that is present but sees nothing now also falls through to
/proc. - `suite/test_newest.py`: a `_holder(p, port)` helper decides,
independently of `testbed.sh`, whether this host can see the listener
(`lsof -t` names the pid, or `/proc//fd` holds a socket link).
Both tests demand the pid whenever it can, and accept `?` only when it
cannot. So on the HF runner, where /proc is readable, they now demand
the real pid too. The second assertion also gained the trailing comma
(`held by pid ,`), so a pid prefix no longer matches. - VERSION 3.20.1, handbook line 3 and a §10 entry; `package.py --base`
rebuilt the zip and `--base --check` says it is current.
Tested
Nothing ran on the Mac (no local suites). `bash -n testbed.sh` and
`py_compile` pass, and the awk parsing was checked by hand against a
sample `/proc/net/tcp`. This PR's CI is the gate on ubuntu (lsof
path); the soulcraft-hf integration run after the pin move is the check
on the /proc path.
🤖 Generated with Claude Code
Co-authored-by: Claude Opus 5.5 noreply@anthropic.com
The zip is what a pod installs. Handbook: comfyui-base-handbook.md