From c08e6e48f07324d60e7a5371d22e7e6cb5ec4270 Mon Sep 17 00:00:00 2001 From: Mark Rousskov Date: Fri, 10 Apr 2026 11:36:21 -0400 Subject: [PATCH] Add Send/Sync impl for std::process::CommandArgs --- library/std/src/process.rs | 6 ++++++ library/std/src/sys/process/unix/common/cstring_array.rs | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/library/std/src/process.rs b/library/std/src/process.rs index 321b68b3225ad..e8367fe8bdf3a 100644 --- a/library/std/src/process.rs +++ b/library/std/src/process.rs @@ -1296,6 +1296,12 @@ impl<'a> ExactSizeIterator for CommandArgs<'a> { } } +const fn assert_send() {} +const fn assert_sync() {} + +const _: () = assert_send::>(); +const _: () = assert_sync::>(); + /// An iterator over the command environment variables. /// /// This struct is created by diff --git a/library/std/src/sys/process/unix/common/cstring_array.rs b/library/std/src/sys/process/unix/common/cstring_array.rs index 1c840a85df9ba..c747b4363b67c 100644 --- a/library/std/src/sys/process/unix/common/cstring_array.rs +++ b/library/std/src/sys/process/unix/common/cstring_array.rs @@ -91,6 +91,11 @@ pub struct CStringIter<'a> { iter: crate::slice::Iter<'a, *const c_char>, } +// SAFETY: `CStringIter` is basically just a `slice::Iter<&'a CStr>` +unsafe impl Send for CStringIter<'_> {} +// SAFETY: `CStringIter` is basically just a `slice::Iter<&'a CStr>` +unsafe impl Sync for CStringIter<'_> {} + impl<'a> Iterator for CStringIter<'a> { type Item = &'a CStr; fn next(&mut self) -> Option<&'a CStr> {