mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-05-01 05:04:26 +00:00
runtime:all APIs are hang in the service.mu
When the vmm process exits abnormally, a goroutine sets s.monitor to null in the 'watchSandbox' function without getting service.mu, This will cause another goroutine to block when sending a message to s.monitor, and it holds service.mu, which leads to a deadlock. For example, the wait function in the file .../pkg/containerd-shim-v2/wait.go will send a message to s.monitor after obtaining service.mu, but s.monitor may be null at this time Fixes: #6059 Signed-off-by: ls <335814617@qq.com>
This commit is contained in:
parent
2b4b825228
commit
69fc8de712
@ -120,10 +120,12 @@ func watchSandbox(ctx context.Context, s *service) {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
s.monitor = nil
|
|
||||||
|
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
defer s.mu.Unlock()
|
defer s.mu.Unlock()
|
||||||
|
|
||||||
|
s.monitor = nil
|
||||||
|
|
||||||
// sandbox malfunctioning, cleanup as much as we can
|
// sandbox malfunctioning, cleanup as much as we can
|
||||||
shimLog.WithError(err).Warn("sandbox stopped unexpectedly")
|
shimLog.WithError(err).Warn("sandbox stopped unexpectedly")
|
||||||
err = s.sandbox.Stop(ctx, true)
|
err = s.sandbox.Stop(ctx, true)
|
||||||
|
Loading…
Reference in New Issue
Block a user