mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-06-26 23:38:31 +00:00
fix(runtime-rs): add exited state to ensure cleanup
Set process status to exited at end of io wait, which indicate process exited only, but stop process has not been finished. Otherwise, the cleanup_container will be skipped. Fixes: #6393 Signed-off-by: Yipeng Yin <yinyipeng@bytedance.com>
This commit is contained in:
parent
65fa19fe92
commit
8030e469b2
@ -184,6 +184,7 @@ pub enum ProcessStatus {
|
||||
Stopped = 3,
|
||||
Paused = 4,
|
||||
Pausing = 5,
|
||||
Exited = 6,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
|
@ -56,6 +56,7 @@ impl From<ProcessStatus> for api::Status {
|
||||
ProcessStatus::Stopped => api::Status::STOPPED,
|
||||
ProcessStatus::Paused => api::Status::PAUSED,
|
||||
ProcessStatus::Pausing => api::Status::PAUSING,
|
||||
ProcessStatus::Exited => api::Status::STOPPED,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -200,10 +200,11 @@ impl ContainerInner {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
self.check_state(vec![ProcessStatus::Running])
|
||||
self.check_state(vec![ProcessStatus::Running, ProcessStatus::Exited])
|
||||
.await
|
||||
.context("check state")?;
|
||||
|
||||
if state == ProcessStatus::Running {
|
||||
// if use force mode to stop container, stop always successful
|
||||
// send kill signal to container
|
||||
// ignore the error of sending signal, since the process would
|
||||
@ -214,6 +215,7 @@ impl ContainerInner {
|
||||
warn!(logger, "failed to signal kill. {:?}", e);
|
||||
})
|
||||
.ok();
|
||||
}
|
||||
|
||||
match process.process_type {
|
||||
ProcessType::Container => self
|
||||
|
@ -182,7 +182,7 @@ impl Process {
|
||||
drop(exit_status);
|
||||
|
||||
let mut status = status.write().await;
|
||||
*status = ProcessStatus::Stopped;
|
||||
*status = ProcessStatus::Exited;
|
||||
drop(status);
|
||||
|
||||
drop(exit_notifier);
|
||||
|
Loading…
Reference in New Issue
Block a user