diff --git a/server/application/websocket.go b/server/application/websocket.go index a5a15b05df9f9..ff72aa28644da 100644 --- a/server/application/websocket.go +++ b/server/application/websocket.go @@ -23,11 +23,12 @@ var upgrader = func() websocket.Upgrader { // terminalSession implements PtyHandler type terminalSession struct { - wsConn *websocket.Conn - sizeChan chan remotecommand.TerminalSize - doneChan chan struct{} - tty bool - readLock sync.Mutex + wsConn *websocket.Conn + sizeChan chan remotecommand.TerminalSize + doneChan chan struct{} + tty bool + readLock sync.Mutex + writeLock sync.Mutex } // newTerminalSession create terminalSession @@ -95,7 +96,10 @@ func (t *terminalSession) Write(p []byte) (int, error) { log.Errorf("write parse message err: %v", err) return 0, err } - if err := t.wsConn.WriteMessage(websocket.TextMessage, msg); err != nil { + t.writeLock.Lock() + err = t.wsConn.WriteMessage(websocket.TextMessage, msg) + t.writeLock.Unlock() + if err != nil { log.Errorf("write message err: %v", err) return 0, err }