Skip to content

Commit a08d8bd

Browse files
committed
vm_darwin.go: Fix: default_ep.sock was not removed on exit
Change to cancel the context that passed to calling `usernet.StartGVisorNetstack` when the VM stopped. `default_fd.sock` won’t be deleted by this change, but the reason is unknown. Signed-off-by: Norio Nomura <norio.nomura@gmail.com>
1 parent 11a81a8 commit a08d8bd

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

pkg/driver/vz/vm_darwin.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ type virtualMachineWrapper struct {
5353
var vmNetworkFiles = make([]*os.File, 1)
5454

5555
func 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

165168
func createVM(ctx context.Context, inst *limatype.Instance) (*vz.VirtualMachine, error) {

0 commit comments

Comments
 (0)