mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-29 00:00:11 +02:00
process: Don't kill child on drop if already successfully killed
This commit is contained in:
+21
-1
@@ -398,7 +398,13 @@ impl<T: Kill> ChildDropGuard<T> {
|
|||||||
|
|
||||||
impl<T: Kill> Kill for ChildDropGuard<T> {
|
impl<T: Kill> Kill for ChildDropGuard<T> {
|
||||||
fn kill(&mut self) -> io::Result<()> {
|
fn kill(&mut self) -> io::Result<()> {
|
||||||
self.inner.kill()
|
let ret = self.inner.kill();
|
||||||
|
|
||||||
|
if ret.is_ok() {
|
||||||
|
self.kill_on_drop = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -811,6 +817,20 @@ mod test {
|
|||||||
assert_eq!(0, mock.num_polls);
|
assert_eq!(0, mock.num_polls);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn no_kill_if_already_killed() {
|
||||||
|
let mut mock = Mock::new();
|
||||||
|
|
||||||
|
{
|
||||||
|
let mut guard = ChildDropGuard::new(&mut mock);
|
||||||
|
let _ = guard.kill();
|
||||||
|
drop(guard);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_eq!(1, mock.num_kills);
|
||||||
|
assert_eq!(0, mock.num_polls);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn no_kill_if_reaped() {
|
fn no_kill_if_reaped() {
|
||||||
let mut mock_pending = Mock::with_result(Ok(Async::NotReady));
|
let mut mock_pending = Mock::with_result(Ok(Async::NotReady));
|
||||||
|
|||||||
Reference in New Issue
Block a user