b3a8734d43
Widen #75162: _prune_if_needed() drops finished sessions (TTL expiry and oldest-finished eviction at MAX_PROCESSES) — release their Popen/PTY handles there too, covering sessions inserted into _finished without passing through _move_to_finished(). The release helper is idempotent, so double-close on the normal path is a no-op. Adds two tests: prune releases handles of dropped sessions, and a still-running session's pipe stays open.