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:
Anthony Romano 2017-05-02 16:12:02 -07:00
parent 43e5f892f6
commit 61abf25859

View File

@ -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()
}