Make Conn Close idempotent

* die (which is called by Close) now closes underlying connection
scan-io
Jack Christensen 2014-06-20 14:50:36 -05:00
parent 6c7f173b08
commit 7a8e80ac0d
1 changed files with 8 additions and 0 deletions

View File

@ -232,7 +232,13 @@ func Connect(config ConnConfig) (c *Conn, err error) {
} }
} }
// Close closes a connection. It is safe to call Close on a already closed
// connection.
func (c *Conn) Close() (err error) { func (c *Conn) Close() (err error) {
if !c.IsAlive() {
return nil
}
err = c.txMsg('X', c.getBuf(), true) err = c.txMsg('X', c.getBuf(), true)
c.die(errors.New("Closed")) c.die(errors.New("Closed"))
c.logger.Info("Closed connection") c.logger.Info("Closed connection")
@ -1190,4 +1196,6 @@ func (c *Conn) getBuf() *bytes.Buffer {
func (c *Conn) die(err error) { func (c *Conn) die(err error) {
c.alive = false c.alive = false
c.causeOfDeath = err c.causeOfDeath = err
c.writer.Flush()
c.conn.Close()
} }