clh: fast exit from isClhRunning if the process was stopped
Use atomic operations instead of acquiring a mutex in isClhRunning.
This stops isClhRunning from generating a deadlock by trying to
reacquire an already-acquired lock when called via StopVM->terminate.
@@ -1401,6 +1401,10 @@ func (clh *cloudHypervisor) isClhRunning(timeout uint) (bool, error) {
pid := clh.state.PID
+ if atomic.LoadInt32(&clh.stopped) != 0 {
+ return false, nil
+ }
+
if err := syscall.Kill(pid, syscall.Signal(0)); err != nil {
return false, nil
}
