@@ -61,31 +61,46 @@ func ShutdownDevice(device *core.Record) error {
6161
6262 for {
6363 select {
64- case <- time .After (1 * time .Second ):
65- if time .Since (start ) >= time .Duration (shutdownTimeout )* time .Second {
66- if err := KillProcess (cmd .Process ); err != nil {
67- logger .Error .Println (err )
64+ case err := <- done :
65+ if err != nil {
66+ return fmt .Errorf ("%s" , stderr .String ())
67+ } else {
68+ for {
69+ isOnline , err := PingDevice (device )
70+ if err != nil {
71+ logger .Error .Println (err )
72+ return err
73+ }
74+ if isOnline {
75+ if time .Since (start ) >= time .Duration (shutdownTimeout )* time .Second {
76+ return fmt .Errorf ("%s not offline after %d seconds" , device .GetString ("name" ), shutdownTimeout )
77+ }
78+ }
79+ if ! isOnline {
80+ return nil
81+ }
82+ time .Sleep (1 * time .Second )
6883 }
69- return fmt .Errorf ("%s not offline after %d seconds" , device .GetString ("name" ), shutdownTimeout )
7084 }
85+ default :
7186 isOnline , err := PingDevice (device )
7287 if err != nil {
7388 logger .Error .Println (err )
7489 return err
7590 }
76- if ! isOnline {
91+ if time . Since ( start ) >= time . Duration ( shutdownTimeout ) * time . Second {
7792 if err := KillProcess (cmd .Process ); err != nil {
7893 logger .Error .Println (err )
7994 }
80- return nil
95+ return fmt . Errorf ( "%s not offline after %d seconds" , device . GetString ( "name" ), shutdownTimeout )
8196 }
82- case err := <- done :
83- if err != nil {
97+ if ! isOnline {
8498 if err := KillProcess (cmd .Process ); err != nil {
8599 logger .Error .Println (err )
86100 }
87- return fmt . Errorf ( "%s" , stderr . String ())
101+ return nil
88102 }
103+ time .Sleep (1 * time .Second )
89104 }
90105 }
91106}
0 commit comments