Skip to content

Commit 80690d7

Browse files
committed
Serialize overlay filter plumbing
When plumbing overlay filter rules serialize this to make sure that multiple sandbox join or leave is not causing erroneous behavior while moving the RETURN rule in the predefined chains. Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
1 parent 98dda7e commit 80690d7

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

drivers/overlay/filter.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ const globalChain = "DOCKER-OVERLAY"
1212

1313
var filterOnce sync.Once
1414

15+
var filterChan = make(chan struct{}, 1)
16+
17+
func filterWait() func() {
18+
filterChan <- struct{}{}
19+
return func() { <-filterChan }
20+
}
21+
1522
func chainExists(cname string) bool {
1623
if _, err := iptables.Raw("-L", cname); err != nil {
1724
return false
@@ -69,10 +76,14 @@ func setNetworkChain(cname string, remove bool) error {
6976
}
7077

7178
func addNetworkChain(cname string) error {
79+
defer filterWait()()
80+
7281
return setNetworkChain(cname, false)
7382
}
7483

7584
func removeNetworkChain(cname string) error {
85+
defer filterWait()()
86+
7687
return setNetworkChain(cname, true)
7788
}
7889

@@ -119,9 +130,13 @@ func setFilters(cname, brName string, remove bool) error {
119130
}
120131

121132
func addFilters(cname, brName string) error {
133+
defer filterWait()()
134+
122135
return setFilters(cname, brName, false)
123136
}
124137

125138
func removeFilters(cname, brName string) error {
139+
defer filterWait()()
140+
126141
return setFilters(cname, brName, true)
127142
}

0 commit comments

Comments
 (0)