@@ -21,6 +21,7 @@ import (
21
21
"bytes"
22
22
"encoding/json"
23
23
"fmt"
24
+ "io"
24
25
"math/rand"
25
26
"net"
26
27
"os"
@@ -170,21 +171,23 @@ func checkPid(pid int) error {
170
171
}
171
172
172
173
func (d * Driver ) GetState () (state.State , error ) {
173
- if _ , err := os .Stat (d .pidfilePath ()); err != nil {
174
- return state .Stopped , nil
175
- }
176
- p , err := os .ReadFile (d .pidfilePath ())
177
- if err != nil {
178
- return state .Error , err
179
- }
180
- pid , err := strconv .Atoi (strings .TrimSpace (string (p )))
181
- if err != nil {
182
- return state .Error , err
183
- }
184
- if err := checkPid (pid ); err != nil {
185
- // No pid, remove pidfile
186
- os .Remove (d .pidfilePath ())
187
- return state .Stopped , nil
174
+ if runtime .GOOS != "windows" {
175
+ if _ , err := os .Stat (d .pidfilePath ()); err != nil {
176
+ return state .Stopped , nil
177
+ }
178
+ p , err := os .ReadFile (d .pidfilePath ())
179
+ if err != nil {
180
+ return state .Error , err
181
+ }
182
+ pid , err := strconv .Atoi (strings .TrimSpace (string (p )))
183
+ if err != nil {
184
+ return state .Error , err
185
+ }
186
+ if err := checkPid (pid ); err != nil {
187
+ // No pid, remove pidfile
188
+ os .Remove (d .pidfilePath ())
189
+ return state .Stopped , nil
190
+ }
188
191
}
189
192
ret , err := d .RunQMPCommand ("query-status" )
190
193
if err != nil {
@@ -425,8 +428,10 @@ func (d *Driver) Start() error {
425
428
return fmt .Errorf ("unknown network: %s" , d .Network )
426
429
}
427
430
428
- startCmd = append (startCmd ,
429
- "-daemonize" )
431
+ if runtime .GOOS != "windows" {
432
+ startCmd = append (startCmd ,
433
+ "-daemonize" )
434
+ }
430
435
431
436
if d .CloudConfigRoot != "" {
432
437
startCmd = append (startCmd ,
@@ -453,7 +458,11 @@ func (d *Driver) Start() error {
453
458
startCmd = append ([]string {d .SocketVMNetPath , d .Program }, startCmd ... )
454
459
}
455
460
456
- if stdout , stderr , err := cmdOutErr (startProgram , startCmd ... ); err != nil {
461
+ startFunc := cmdOutErr
462
+ if runtime .GOOS == "windows" {
463
+ startFunc = cmdStart
464
+ }
465
+ if stdout , stderr , err := startFunc (startProgram , startCmd ... ); err != nil {
457
466
fmt .Printf ("OUTPUT: %s\n " , stdout )
458
467
fmt .Printf ("ERROR: %s\n " , stderr )
459
468
return err
@@ -522,6 +531,12 @@ func cmdOutErr(cmdStr string, args ...string) (string, string, error) {
522
531
return stdoutStr , stderrStr , err
523
532
}
524
533
534
+ func cmdStart (cmdStr string , args ... string ) (string , string , error ) {
535
+ cmd := exec .Command (cmdStr , args ... )
536
+ log .Debugf ("executing: %s %s" , cmdStr , strings .Join (args , " " ))
537
+ return "" , "" , cmd .Start ()
538
+ }
539
+
525
540
func (d * Driver ) Stop () error {
526
541
if _ , err := d .RunQMPCommand ("system_powerdown" ); err != nil {
527
542
return err
@@ -794,7 +809,7 @@ func WaitForTCPWithDelay(addr string, duration time.Duration) error {
794
809
continue
795
810
}
796
811
defer conn .Close ()
797
- if _ , err := conn .Read (make ([]byte , 1 )); err != nil {
812
+ if _ , err := conn .Read (make ([]byte , 1 )); err != nil && err != io . EOF {
798
813
time .Sleep (duration )
799
814
continue
800
815
}
0 commit comments