Bug fixes:
- GH #126 - Handle EAGAIN in _write() for non-blocking pipe writes (PR #221)
- GH #149 - Prevent fd leak in _do_kid_and_exit when TFD == KFD (PR #218)
- GH #131 - Suppress spurious "Filehandle STDIN reopened" warnings in child
when $^W=1 with pty redirection (PR #219)
- GH #116 - Make binmode the default on Win32 to prevent newline mangling of
binary data (PR #192)
- GH #82 - Avoid undef warning in _cleanup when fork fails (PR #197)
- GH #97 - Wrap coderef in eval in _do_kid_and_exit to prevent child process
from escaping into parent code path on die() (PR #193)
- GH #122 - Propagate CODE ref exceptions back to parent via error pipe
(PR #224)
- GH #57 - Close external input handles in parent after fork to prevent
hangs when child exits early (PR #226)
- GH #134 - Preserve $cur_kid when a Timer is encountered in harness(),
fixing "No command before 'init'" errors (PR #187)
- GH #124 - Restore compat for bare undef params in harness() (PR #190)
- GH #141 - Passing undef as stdin/stdout/stderr no longer dies (PR #184)
- GH #139 - Avoid "Modification of a read-only value" when passing undef
stdin (PR #185)
- GH #162 - Reject empty/undef command name in _search_path (PR #182)
- GH #154 - Limit input buffer chunk size to prevent exponential memory
growth when streaming data to slow consumers (PR #183)
- GH #128 - Silently ignore undef arguments passed as timeout to
harness() (PR #189)
- GH #133 - Correct two minor documentation issues in Run.pm (PR #188)
- GH #137 - Skip win32_compile.t when getprotobyname('tcp') is
unavailable (PR #186)
- GH #35 - Survive SIGPIPE when child exits before consuming all stdin
(PR #204)
- GH #92 - Handle EPIPE when child exits before consuming stdin (PR #195)
- GH #93 - Handle tied STDERR without FILENO in _debug_fd (PR #194)
- GH #85 - Invalidate path cache on $PATH change, add clearcache()
(PR #196)
- GH #50 - Support scalar ref for '>pipe' and '
- GH #49 - Use $type in IO::new error message instead of $_ (PR #202)
- GH #66 - Fix
example (PR #198)
- GH #65 - Suppress spurious numeric warning in result() and
results() (PR #199)
- GH #29 - Suppress numeric warnings from result() when SIGCHLD is
IGNORE (PR #205)
- GH #213 - Handle scalar refs in Win32IO pipe operators (PR #214)
- GH #215 - Remove blanket TODO from win32_newlines.t, keep only for
still-failing tests (PR #216)
- GH #169 - Prevent handle inheritance of caller-owned fds on
Win32 (PR #181, PR #211)
- rt.cpan.org #11215 - Enable kill_kill test 1 on Win32 (PR #207)
- GH #237 - Suppress filehandle warning during global destruction in
tied_stderr.t (PR #239)
- GH #236 - Resolve File::Temp cleanup warning on Windows CI (PR #238)
- GH #230 - Suppress Socket::IPPROTO_TCP redefined warning in
win32_compile.t (PR #235)
- GH #222 - Prevent tied_stderr.t from hanging on Win32 CI (PR #225)
Improvements:
- GH #178 - Add env option to set child process environment variables
without modifying parent %ENV (PR #179)
- GH #171 - Add started() method to query harness run state (PR #180)
- GH #169 - Add finished() method to distinguish exit-0 from
not-yet-exited (PR #181)
- GH #44 - Add pid(), pids(), is_running(), full_path(), full_paths()
convenience methods (PR #203)
- GH #64 - Add
stdin (PR #200)
- PR #212 - Add close_stdin() method to prevent unbounded memory growth
when streaming to long-running children
Maintenance:
- GH #208 - Consolidate CI into single testsuite.yml with dynamic Perl
version matrix (PR #209)
- PR #220 - Add CLAUDE.md with project guidelines for AI-assisted
development
- Add 5-minute timeout to all CI workflow steps
- GH #228 - Remove TODO from Win32 autoflush test and align with Unix
branch (PR #234)
- GH #223 - Clean up resolved TODO tests in win32_newlines.t (PR #227)
- GH #231 - Skip t/eintr.t early on Win32 to avoid SIGUSR1
warning (PR #233)
- GH #229 - Suppress File::Temp version-string warnings in test
suite (PR #232)