@@ -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