@@ -418,6 +418,24 @@ func Stop(mc *vmconfigs.MachineConfig, mp vmconfigs.VMProvider, hardStop bool) e
418418 return stopLocked (mc , mp , dirs , hardStop )
419419}
420420
421+ // StopThenStart stops and starts the machine while holding its lock.
422+ func StopThenStart (mc * vmconfigs.MachineConfig , mp vmconfigs.VMProvider , hardStop bool , opts machine.StartOptions , updateSystemConn * bool ) error {
423+ dirs , err := env .GetMachineDirs (mp .VMType ())
424+ if err != nil {
425+ return err
426+ }
427+ mc .Lock ()
428+ defer mc .Unlock ()
429+ if err := mc .Refresh (); err != nil {
430+ return fmt .Errorf ("reload config: %w" , err )
431+ }
432+
433+ if err := stopLocked (mc , mp , dirs , hardStop ); err != nil {
434+ return err
435+ }
436+ return startLocked (mc , mp , dirs , opts , updateSystemConn )
437+ }
438+
421439// stopLocked stops the machine and expects the caller to hold the machine's lock.
422440func stopLocked (mc * vmconfigs.MachineConfig , mp vmconfigs.VMProvider , dirs * machineDefine.MachineDirs , hardStop bool ) error {
423441 state , err := mp .State (mc , false )
@@ -463,12 +481,6 @@ func stopLocked(mc *vmconfigs.MachineConfig, mp vmconfigs.VMProvider, dirs *mach
463481}
464482
465483func Start (mc * vmconfigs.MachineConfig , mp vmconfigs.VMProvider , opts machine.StartOptions , updateSystemConn * bool ) error {
466- var updateDefaultConnection bool
467-
468- defaultBackoff := 500 * time .Millisecond
469- maxBackoffs := 6
470- signalChanClosed := false
471-
472484 dirs , err := env .GetMachineDirs (mp .VMType ())
473485 if err != nil {
474486 return err
@@ -481,6 +493,17 @@ func Start(mc *vmconfigs.MachineConfig, mp vmconfigs.VMProvider, opts machine.St
481493 return fmt .Errorf ("reload config: %w" , err )
482494 }
483495
496+ return startLocked (mc , mp , dirs , opts , updateSystemConn )
497+ }
498+
499+ // startLocked starts the machine and expects the caller to hold the machine's lock.
500+ func startLocked (mc * vmconfigs.MachineConfig , mp vmconfigs.VMProvider , dirs * machineDefine.MachineDirs , opts machine.StartOptions , updateSystemConn * bool ) error {
501+ var updateDefaultConnection bool
502+
503+ defaultBackoff := 500 * time .Millisecond
504+ maxBackoffs := 6
505+ signalChanClosed := false
506+
484507 connName := mc .Name
485508 if mc .HostUser .Rootful {
486509 connName += "-root"
0 commit comments