@@ -53,7 +53,7 @@ type virtualMachineWrapper struct {
5353var vmNetworkFiles = make ([]* os.File , 1 )
5454
5555func startVM (ctx context.Context , inst * limatype.Instance , sshLocalPort int ) (* virtualMachineWrapper , chan error , error ) {
56- usernetClient , err := startUsernet (ctx , inst )
56+ usernetClient , stopUsernet , err := startUsernet (ctx , inst )
5757 if err != nil {
5858 return nil , nil , err
5959 }
@@ -118,6 +118,7 @@ func startVM(ctx context.Context, inst *limatype.Instance, sshLocalPort int) (*v
118118 wrapper .stopped = true
119119 wrapper .mu .Unlock ()
120120 _ = usernetClient .UnExposeSSH (inst .SSHLocalPort )
121+ stopUsernet ()
121122 errCh <- errors .New ("vz driver state stopped" )
122123 default :
123124 logrus .Debugf ("[VZ] - vm state change: %q" , newState )
@@ -129,22 +130,23 @@ func startVM(ctx context.Context, inst *limatype.Instance, sshLocalPort int) (*v
129130 return wrapper , errCh , err
130131}
131132
132- func startUsernet (ctx context.Context , inst * limatype.Instance ) (* usernet.Client , error ) {
133+ func startUsernet (ctx context.Context , inst * limatype.Instance ) (* usernet.Client , context. CancelFunc , error ) {
133134 if firstUsernetIndex := limayaml .FirstUsernetIndex (inst .Config ); firstUsernetIndex != - 1 {
134135 nwName := inst .Config .Networks [firstUsernetIndex ].Lima
135- return usernet .NewClientByName (nwName ), nil
136+ return usernet .NewClientByName (nwName ), nil , nil
136137 }
137138 // Start a in-process gvisor-tap-vsock
138139 endpointSock , err := usernet .SockWithDirectory (inst .Dir , "" , usernet .EndpointSock )
139140 if err != nil {
140- return nil , err
141+ return nil , nil , err
141142 }
142143 vzSock , err := usernet .SockWithDirectory (inst .Dir , "" , usernet .FDSock )
143144 if err != nil {
144- return nil , err
145+ return nil , nil , err
145146 }
146147 os .RemoveAll (endpointSock )
147148 os .RemoveAll (vzSock )
149+ ctx , cancel := context .WithCancel (ctx )
148150 err = usernet .StartGVisorNetstack (ctx , & usernet.GVisorNetstackOpts {
149151 MTU : 1500 ,
150152 Endpoint : endpointSock ,
@@ -156,10 +158,11 @@ func startUsernet(ctx context.Context, inst *limatype.Instance) (*usernet.Client
156158 Subnet : networks .SlirpNetwork ,
157159 })
158160 if err != nil {
159- return nil , err
161+ defer cancel ()
162+ return nil , nil , err
160163 }
161164 subnetIP , _ , err := net .ParseCIDR (networks .SlirpNetwork )
162- return usernet .NewClient (endpointSock , subnetIP ), err
165+ return usernet .NewClient (endpointSock , subnetIP ), cancel , err
163166}
164167
165168func createVM (ctx context.Context , inst * limatype.Instance ) (* vz.VirtualMachine , error ) {
0 commit comments