@@ -19,7 +19,7 @@ struct InnerPidFd;
1919///
2020/// A `PidFd` can be obtained by setting the corresponding option on [`Command`]
2121/// with [`create_pidfd`]. Subsequently, the created pidfd can be retrieved
22- /// from the [`Child`] by calling [`pidfd`] or [`take_pidfd `].
22+ /// from the [`Child`] by calling [`pidfd`] or [`into_pidfd `].
2323///
2424/// Example:
2525/// ```no_run
@@ -33,7 +33,7 @@ struct InnerPidFd;
3333/// .expect("Failed to spawn child");
3434///
3535/// let pidfd = child
36- /// .take_pidfd ()
36+ /// .into_pidfd ()
3737/// .expect("Failed to retrieve pidfd");
3838///
3939/// // The file descriptor will be closed when `pidfd` is dropped.
@@ -44,7 +44,7 @@ struct InnerPidFd;
4444/// [`create_pidfd`]: CommandExt::create_pidfd
4545/// [`Child`]: process::Child
4646/// [`pidfd`]: fn@ChildExt::pidfd
47- /// [`take_pidfd `]: ChildExt::take_pidfd
47+ /// [`into_pidfd `]: ChildExt::into_pidfd
4848/// [`pidfd_open(2)`]: https://man7.org/linux/man-pages/man2/pidfd_open.2.html
4949#[ derive( Debug ) ]
5050#[ repr( transparent) ]
@@ -159,18 +159,26 @@ pub trait ChildExt: Sealed {
159159 /// [`Child`]: process::Child
160160 fn pidfd ( & self ) -> Result < & PidFd > ;
161161
162- /// Takes ownership of the [`PidFd`] created for this [`Child`], if available.
162+ /// Returns the [`PidFd`] created for this [`Child`], if available.
163+ /// Otherwise self is returned.
163164 ///
164165 /// A pidfd will only be available if its creation was requested with
165166 /// [`create_pidfd`] when the corresponding [`Command`] was created.
166167 ///
168+ /// Taking ownership of the PidFd consumes the Child to avoid pid reuse
169+ /// races. Use [`pidfd`] and [`BorrowedFd::try_clone_to_owned`] if
170+ /// you don't want to disassemble the Child yet.
171+ ///
167172 /// Even if requested, a pidfd may not be available due to an older
168173 /// version of Linux being in use, or if some other error occurred.
169174 ///
170175 /// [`Command`]: process::Command
171176 /// [`create_pidfd`]: CommandExt::create_pidfd
177+ /// [`pidfd`]: ChildExt::pidfd
172178 /// [`Child`]: process::Child
173- fn take_pidfd ( & mut self ) -> Result < PidFd > ;
179+ fn into_pidfd ( self ) -> crate :: result:: Result < PidFd , Self >
180+ where
181+ Self : Sized ;
174182}
175183
176184/// Os-specific extensions for [`Command`]
@@ -181,7 +189,7 @@ pub trait CommandExt: Sealed {
181189 /// spawned by this [`Command`].
182190 /// By default, no pidfd will be created.
183191 ///
184- /// The pidfd can be retrieved from the child with [`pidfd`] or [`take_pidfd `].
192+ /// The pidfd can be retrieved from the child with [`pidfd`] or [`into_pidfd `].
185193 ///
186194 /// A pidfd will only be created if it is possible to do so
187195 /// in a guaranteed race-free manner. Otherwise, [`pidfd`] will return an error.
@@ -195,7 +203,7 @@ pub trait CommandExt: Sealed {
195203 /// [`Command`]: process::Command
196204 /// [`Child`]: process::Child
197205 /// [`pidfd`]: fn@ChildExt::pidfd
198- /// [`take_pidfd `]: ChildExt::take_pidfd
206+ /// [`into_pidfd `]: ChildExt::into_pidfd
199207 fn create_pidfd ( & mut self , val : bool ) -> & mut process:: Command ;
200208}
201209
0 commit comments