Fix infinite loop when SSL_CERT_FILE is a directory
When SSL_CERT_FILE points to a directory instead of a file, the code
previously only checked if the path exists, which returns true for
directories. This caused rustls-native-certs to attempt reading the
directory as a certificate file, resulting in an infinite memory
allocation loop.
The fix validates that SSL_CERT_FILE is an actual file before enabling
native TLS certificate loading, and provides a helpful warning message
when the path is not a file.
Closes #17494
Fix uvw not terminating child uv process when killed
On Windows, use Job Objects to ensure the child `uv.exe` process is
terminated when wrapper processes (`uvw.exe`, `uvx.exe`) are killed.
This is important for tools like Task Scheduler that terminate the
wrapper process.
The fix uses the `JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE` flag which
instructs Windows to terminate all processes associated with the job
when the job object handle is closed (which happens when the wrapper
is terminated).
This change:
- Creates a shared `windows_spawn` module with the Job Object logic
- Updates both `uvw.exe` and `uvx.exe` to use this shared module
- Matches the approach used by the trampoline in `bounce.rs`
Closes #17492