Ensure that the WaitGroup isn't marked done twice when edgecase errors occurr

This commit is contained in:
rubyist 2013-11-03 13:03:01 -05:00
parent d2b7f5f03a
commit e068b65c78

View File

@ -59,11 +59,15 @@ type deadliner interface {
// Allows for us to notice when the connection is closed.
type conn struct {
net.Conn
wg *sync.WaitGroup
wg *sync.WaitGroup
closed bool
}
func (c conn) Close() error {
defer c.wg.Done()
func (c *conn) Close() error {
if !c.closed {
c.closed = true
defer c.wg.Done()
}
return c.Conn.Close()
}
@ -133,7 +137,7 @@ func (l *listener) Accept() (net.Conn, error) {
}
return nil, err
}
return conn{Conn: c, wg: &l.wg}, nil
return &conn{Conn: c, wg: &l.wg}, nil
}
type Process struct {