add mutex for write/close
@@ -17,6 +17,7 @@ type Conn struct {
DefaultMessageType int
reader io.Reader
closeOnce sync.Once
+ mx sync.Mutex
}
func (c *Conn) Read(b []byte) (int, error) {
@@ -67,6 +68,9 @@ func (c *Conn) prepNextReader() error {
}
func (c *Conn) Write(b []byte) (n int, err error) {
+ c.mx.Lock()
+ defer c.mx.Unlock()
+
if err := c.Conn.WriteMessage(c.DefaultMessageType, b); err != nil {
return 0, err
}
@@ -78,6 +82,9 @@ func (c *Conn) Write(b []byte) (n int, err error) {
// close error, subsequent and concurrent calls will return nil.
// This method is thread-safe.
func (c *Conn) Close() error {
+ c.mx.Lock()
+ defer c.mx.Unlock()
+
var err error
c.closeOnce.Do(func() {
err1 := c.Conn.WriteControl(
