- The child's stdin pipe and the pty master are closed before the
reap. The reap polls waitpid() with WNOHANG for
WOLFSSHD_CHILD_REAP_TRIES x WOLFSSHD_CHILD_REAP_WAIT_US, then
sends SIGKILL; a failed kill() is logged and ends the wait.
- ChildSig is installed before forkpty() instead of after it.
- An EIO read from the pty master ends the child's output
instead of the loop.
- A held backlog is sent with SHELL_FlushOut() before the pipe
drain; the drain is skipped when the backlog is not sent.
- New sshd_channel_close_test.sh (paramiko) closes the channel
while output is held, for an exec command and a pty shell, and
checks that the command and the connection both end; it also
checks exit status 3 from an exec and an interactive shell.
run_all runs it.
- sshd-test.yml and code-coverage.yml install python3-paramiko
through install-apt-deps, and the ubuntu-24.04-tests bundle
lists it.
Port wolfSSL's install-apt-deps action and ci-deps-image workflow. A
daily job on master downloads each package list's .debs and publishes
them as ghcr.io/wolfssl/wolfssh-ci-debs; the workflows install from
that bundle offline and fall back to the mirror with bounded retries.
- two bundles: ubuntu-24.04-tests and ubuntu-24.04-compilers
- every apt-get install step in the workflows now uses the action
- the package must be made public once after the first build; until
then every job takes the mirror fallback
- sshd-test job timeout goes from 10 to 15 minutes to fit the install
Every workflow that installs packages now passes Acquire::Retries=3
to apt-get, and each install step gets its own timeout, sized to fit
inside its job's limit, so a stalled mirror fails fast under a step
name that says what went wrong.
- cppcheck runs apt-get update before installing, and installs with -y
- sftp-test and sshd-test move their inline installs into their own
steps
- test-fatfs job timeout goes from 4 to 10 minutes to hold its installs
The merge step takes --failure-mode=all, so a raw profile left short by
a killed process is warned about and skipped instead of aborting the
report. Tests SIGKILL their servers in cleanup traps, and a process
killed while writing its profile leaves a corrupt header behind. The
step still fails when no profile can be read at all.