@@ -249,14 +249,15 @@ func (c *CtrlHub) handleLocalNetworkDeviceEvent() error {
249
249
go func () {
250
250
for {
251
251
linkCh := make (chan netlink.LinkUpdate , LinkUpdateChainSize )
252
+ doneCh := make (chan struct {})
252
253
exitCh := make (chan struct {})
253
254
254
255
errorCallback := func (err error ) {
255
256
c .logger .Error (err , "subscribe netlink link event exit with error" )
256
257
close (exitCh )
257
258
}
258
259
259
- if err := netlink .LinkSubscribeWithOptions (linkCh , nil , netlink.LinkSubscribeOptions {
260
+ if err := netlink .LinkSubscribeWithOptions (linkCh , doneCh , netlink.LinkSubscribeOptions {
260
261
Namespace : & hostNetNs ,
261
262
ErrorCallback : errorCallback ,
262
263
}); err != nil {
@@ -277,6 +278,7 @@ func (c *CtrlHub) handleLocalNetworkDeviceEvent() error {
277
278
c .ipInstanceTriggerSourceForHostLink .Trigger ()
278
279
}
279
280
case <- exitCh :
281
+ close (doneCh )
280
282
break linkLoop
281
283
}
282
284
}
@@ -286,14 +288,15 @@ func (c *CtrlHub) handleLocalNetworkDeviceEvent() error {
286
288
go func () {
287
289
for {
288
290
addrCh := make (chan netlink.AddrUpdate , AddrUpdateChainSize )
291
+ doneCh := make (chan struct {})
289
292
exitCh := make (chan struct {})
290
293
291
294
errorCallback := func (err error ) {
292
295
c .logger .Error (err , "subscribe netlink addr event exit with error" )
293
296
close (exitCh )
294
297
}
295
298
296
- if err := netlink .AddrSubscribeWithOptions (addrCh , nil , netlink.AddrSubscribeOptions {
299
+ if err := netlink .AddrSubscribeWithOptions (addrCh , doneCh , netlink.AddrSubscribeOptions {
297
300
Namespace : & hostNetNs ,
298
301
ErrorCallback : errorCallback ,
299
302
}); err != nil {
@@ -319,6 +322,7 @@ func (c *CtrlHub) handleLocalNetworkDeviceEvent() error {
319
322
c .nodeInfoTriggerSourceForHostAddr .Trigger ()
320
323
}
321
324
case <- exitCh :
325
+ close (doneCh )
322
326
break addrLoop
323
327
}
324
328
}
@@ -426,14 +430,15 @@ func (c *CtrlHub) handleVxlanInterfaceNeighEvent() error {
426
430
}
427
431
428
432
neighCh := make (chan netlink.NeighUpdate , NeighUpdateChanSize )
433
+ doneCh := make (chan struct {})
429
434
exitCh := make (chan struct {})
430
435
431
436
errorCallback := func (err error ) {
432
437
c .logger .Error (err , "subscribe netlink neigh event exit with error" )
433
438
close (exitCh )
434
439
}
435
440
436
- if err := netlink .NeighSubscribeWithOptions (neighCh , nil , netlink.NeighSubscribeOptions {
441
+ if err := netlink .NeighSubscribeWithOptions (neighCh , doneCh , netlink.NeighSubscribeOptions {
437
442
Namespace : & hostNetNs ,
438
443
ErrorCallback : errorCallback ,
439
444
}); err != nil {
@@ -466,6 +471,7 @@ func (c *CtrlHub) handleVxlanInterfaceNeighEvent() error {
466
471
c .logger .Error (err , "failed to clear vxlan expired neigh caches" )
467
472
}
468
473
case <- exitCh :
474
+ close (doneCh )
469
475
break neighLoop
470
476
}
471
477
}
0 commit comments