mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
integration: close accepted connection on stopc path
Connection pausing added another exit condition in the listener path, causing the bridge to leak connections instead of closing them when signalled to close. Also adds some additional Close paranoia. Fixes #7823
This commit is contained in:
parent
43e5f892f6
commit
61abf25859
@ -119,6 +119,7 @@ func (b *bridge) serveListen() {
|
||||
b.mu.Unlock()
|
||||
select {
|
||||
case <-b.stopc:
|
||||
inc.Close()
|
||||
return
|
||||
case <-pausec:
|
||||
}
|
||||
@ -152,10 +153,12 @@ func (b *bridge) serveConn(bc *bridgeConn) {
|
||||
wg.Add(2)
|
||||
go func() {
|
||||
io.Copy(bc.out, bc.in)
|
||||
bc.close()
|
||||
wg.Done()
|
||||
}()
|
||||
go func() {
|
||||
io.Copy(bc.in, bc.out)
|
||||
bc.close()
|
||||
wg.Done()
|
||||
}()
|
||||
wg.Wait()
|
||||
@ -168,7 +171,11 @@ type bridgeConn struct {
|
||||
}
|
||||
|
||||
func (bc *bridgeConn) Close() {
|
||||
bc.in.Close()
|
||||
bc.out.Close()
|
||||
bc.close()
|
||||
<-bc.donec
|
||||
}
|
||||
|
||||
func (bc *bridgeConn) close() {
|
||||
bc.in.Close()
|
||||
bc.out.Close()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user