Browse code

libnetwork/drivers/macvlan, ipvlan: un-embed mutexes

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>

Sebastiaan van Stijn authored on 2025/10/19 21:48:06
Showing 4 changed files
... ...
@@ -31,9 +31,11 @@ const (
31 31
 )
32 32
 
33 33
 type driver struct {
34
-	networks map[string]*network
35
-	sync.Mutex
36 34
 	store *datastore.Store
35
+
36
+	// mu protects the networks map.
37
+	mu       sync.Mutex
38
+	networks map[string]*network
37 39
 }
38 40
 
39 41
 type endpoint struct {
... ...
@@ -48,11 +50,13 @@ type endpoint struct {
48 48
 }
49 49
 
50 50
 type network struct {
51
-	id        string
51
+	id     string
52
+	driver *driver
53
+	config *configuration
54
+
55
+	// mu protects the endpoints map.
56
+	mu        sync.Mutex
52 57
 	endpoints map[string]*endpoint
53
-	driver    *driver
54
-	config    *configuration
55
-	sync.Mutex
56 58
 }
57 59
 
58 60
 // Register initializes and registers the libnetwork ipvlan driver.
... ...
@@ -11,9 +11,9 @@ import (
11 11
 )
12 12
 
13 13
 func (d *driver) network(nid string) *network {
14
-	d.Lock()
14
+	d.mu.Lock()
15 15
 	n, ok := d.networks[nid]
16
-	d.Unlock()
16
+	d.mu.Unlock()
17 17
 	if !ok {
18 18
 		log.G(context.TODO()).Errorf("network id %s not found", nid)
19 19
 	}
... ...
@@ -22,21 +22,21 @@ func (d *driver) network(nid string) *network {
22 22
 }
23 23
 
24 24
 func (d *driver) addNetwork(n *network) {
25
-	d.Lock()
25
+	d.mu.Lock()
26 26
 	d.networks[n.id] = n
27
-	d.Unlock()
27
+	d.mu.Unlock()
28 28
 }
29 29
 
30 30
 func (d *driver) deleteNetwork(nid string) {
31
-	d.Lock()
31
+	d.mu.Lock()
32 32
 	delete(d.networks, nid)
33
-	d.Unlock()
33
+	d.mu.Unlock()
34 34
 }
35 35
 
36 36
 // getNetworks Safely returns a slice of existing networks
37 37
 func (d *driver) getNetworks() []*network {
38
-	d.Lock()
39
-	defer d.Unlock()
38
+	d.mu.Lock()
39
+	defer d.mu.Unlock()
40 40
 
41 41
 	ls := make([]*network, 0, len(d.networks))
42 42
 	for _, nw := range d.networks {
... ...
@@ -50,8 +50,8 @@ func (n *network) endpoint(eid string) (*endpoint, error) {
50 50
 	if eid == "" {
51 51
 		return nil, errors.New("invalid endpoint id")
52 52
 	}
53
-	n.Lock()
54
-	defer n.Unlock()
53
+	n.mu.Lock()
54
+	defer n.mu.Unlock()
55 55
 
56 56
 	ep, ok := n.endpoints[eid]
57 57
 	if !ok || ep == nil {
... ...
@@ -61,15 +61,15 @@ func (n *network) endpoint(eid string) (*endpoint, error) {
61 61
 }
62 62
 
63 63
 func (n *network) addEndpoint(ep *endpoint) {
64
-	n.Lock()
64
+	n.mu.Lock()
65 65
 	n.endpoints[ep.id] = ep
66
-	n.Unlock()
66
+	n.mu.Unlock()
67 67
 }
68 68
 
69 69
 func (n *network) deleteEndpoint(eid string) {
70
-	n.Lock()
70
+	n.mu.Lock()
71 71
 	delete(n.endpoints, eid)
72
-	n.Unlock()
72
+	n.mu.Unlock()
73 73
 }
74 74
 
75 75
 func validateID(nid, eid string) error {
... ...
@@ -84,15 +84,15 @@ func validateID(nid, eid string) error {
84 84
 }
85 85
 
86 86
 func (d *driver) getNetwork(id string) (*network, error) {
87
-	d.Lock()
88
-	defer d.Unlock()
89 87
 	if id == "" {
90
-		return nil, types.InvalidParameterErrorf("invalid network id: %s", id)
88
+		return nil, types.InvalidParameterErrorf("invalid network id")
91 89
 	}
92 90
 
93
-	if nw, ok := d.networks[id]; ok {
94
-		return nw, nil
91
+	d.mu.Lock()
92
+	defer d.mu.Unlock()
93
+	nw, ok := d.networks[id]
94
+	if !ok || nw == nil {
95
+		return nil, types.NotFoundErrorf("network not found: %s", id)
95 96
 	}
96
-
97
-	return nil, types.NotFoundErrorf("network not found: %s", id)
97
+	return nw, nil
98 98
 }
... ...
@@ -25,9 +25,11 @@ const (
25 25
 )
26 26
 
27 27
 type driver struct {
28
-	networks map[string]*network
29
-	sync.Mutex
30 28
 	store *datastore.Store
29
+
30
+	// mu protects the networks map.
31
+	mu       sync.Mutex
32
+	networks map[string]*network
31 33
 }
32 34
 
33 35
 type endpoint struct {
... ...
@@ -42,11 +44,13 @@ type endpoint struct {
42 42
 }
43 43
 
44 44
 type network struct {
45
-	id        string
45
+	id     string
46
+	driver *driver
47
+	config *configuration
48
+
49
+	// mu protects the endpoints map.
50
+	mu        sync.Mutex
46 51
 	endpoints map[string]*endpoint
47
-	driver    *driver
48
-	config    *configuration
49
-	sync.Mutex
50 52
 }
51 53
 
52 54
 // Register initializes and registers the libnetwork macvlan driver
... ...
@@ -11,9 +11,9 @@ import (
11 11
 )
12 12
 
13 13
 func (d *driver) network(nid string) *network {
14
-	d.Lock()
14
+	d.mu.Lock()
15 15
 	n, ok := d.networks[nid]
16
-	d.Unlock()
16
+	d.mu.Unlock()
17 17
 	if !ok {
18 18
 		log.G(context.TODO()).Errorf("network id %s not found", nid)
19 19
 	}
... ...
@@ -22,21 +22,21 @@ func (d *driver) network(nid string) *network {
22 22
 }
23 23
 
24 24
 func (d *driver) addNetwork(n *network) {
25
-	d.Lock()
25
+	d.mu.Lock()
26 26
 	d.networks[n.id] = n
27
-	d.Unlock()
27
+	d.mu.Unlock()
28 28
 }
29 29
 
30 30
 func (d *driver) deleteNetwork(nid string) {
31
-	d.Lock()
31
+	d.mu.Lock()
32 32
 	delete(d.networks, nid)
33
-	d.Unlock()
33
+	d.mu.Unlock()
34 34
 }
35 35
 
36 36
 // getNetworks Safely returns a slice of existing networks
37 37
 func (d *driver) getNetworks() []*network {
38
-	d.Lock()
39
-	defer d.Unlock()
38
+	d.mu.Lock()
39
+	defer d.mu.Unlock()
40 40
 
41 41
 	ls := make([]*network, 0, len(d.networks))
42 42
 	for _, nw := range d.networks {
... ...
@@ -50,8 +50,8 @@ func (n *network) endpoint(eid string) (*endpoint, error) {
50 50
 	if eid == "" {
51 51
 		return nil, errors.New("invalid endpoint id")
52 52
 	}
53
-	n.Lock()
54
-	defer n.Unlock()
53
+	n.mu.Lock()
54
+	defer n.mu.Unlock()
55 55
 
56 56
 	ep, ok := n.endpoints[eid]
57 57
 	if !ok || ep == nil {
... ...
@@ -61,15 +61,15 @@ func (n *network) endpoint(eid string) (*endpoint, error) {
61 61
 }
62 62
 
63 63
 func (n *network) addEndpoint(ep *endpoint) {
64
-	n.Lock()
64
+	n.mu.Lock()
65 65
 	n.endpoints[ep.id] = ep
66
-	n.Unlock()
66
+	n.mu.Unlock()
67 67
 }
68 68
 
69 69
 func (n *network) deleteEndpoint(eid string) {
70
-	n.Lock()
70
+	n.mu.Lock()
71 71
 	delete(n.endpoints, eid)
72
-	n.Unlock()
72
+	n.mu.Unlock()
73 73
 }
74 74
 
75 75
 func validateID(nid, eid string) error {
... ...
@@ -83,14 +83,15 @@ func validateID(nid, eid string) error {
83 83
 }
84 84
 
85 85
 func (d *driver) getNetwork(id string) (*network, error) {
86
-	d.Lock()
87
-	defer d.Unlock()
88 86
 	if id == "" {
89
-		return nil, types.InvalidParameterErrorf("invalid network id: %s", id)
90
-	}
91
-	if nw, ok := d.networks[id]; ok {
92
-		return nw, nil
87
+		return nil, types.InvalidParameterErrorf("invalid network id")
93 88
 	}
94 89
 
95
-	return nil, types.NotFoundErrorf("network not found: %s", id)
90
+	d.mu.Lock()
91
+	defer d.mu.Unlock()
92
+	nw, ok := d.networks[id]
93
+	if !ok || nw == nil {
94
+		return nil, types.NotFoundErrorf("network not found: %s", id)
95
+	}
96
+	return nw, nil
96 97
 }