From 493dc78a24eb9451f245720db40b70df5556a46d Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Wed, 4 Nov 2015 17:37:58 +0300 Subject: [PATCH] Simplify channel closing ordering --- client.go | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/client.go b/client.go index 8438dab..859365c 100644 --- a/client.go +++ b/client.go @@ -47,7 +47,7 @@ type Client struct { away *string recvTimestamp time.Time sendTimestamp time.Time - outBuf chan string + outBuf chan *string alive bool sync.Mutex } @@ -77,20 +77,19 @@ func NewClient(conn *proxyproto.Conn) *Client { recvTimestamp: time.Now(), sendTimestamp: time.Now(), alive: true, - outBuf: make(chan string, MaxOutBuf), + outBuf: make(chan *string, MaxOutBuf), } go c.MsgSender() return &c } func (c *Client) SetDead() { - close(c.outBuf) + c.outBuf <- nil c.alive = false } func (c *Client) Close() { c.Lock() - c.conn.Close() if c.alive { c.SetDead() } @@ -134,7 +133,11 @@ func (c *Client) Processor(sink chan ClientEvent) { func (c *Client) MsgSender() { for msg := range c.outBuf { - c.conn.Write(append([]byte(msg), CRLF...)) + if msg == nil { + c.conn.Close() + break + } + c.conn.Write(append([]byte(*msg), CRLF...)) } } @@ -147,11 +150,12 @@ func (c *Client) Msg(text string) { } if len(c.outBuf) == MaxOutBuf { log.Println(c, "output buffer size exceeded, kicking him") - go c.Close() - c.SetDead() + if c.alive { + c.SetDead() + } return } - c.outBuf <- text + c.outBuf <- &text } // Send message from server. It has ": servername" prefix.