From d34c89a325afbef0a8c4d23cece6fb4e4cc2b1a5 Mon Sep 17 00:00:00 2001
From: Anmol Sethi <hi@nhooyr.io>
Date: Mon, 13 Apr 2020 22:31:35 -0400
Subject: [PATCH] Prevent all writes after close

Closes #213
---
 write.go | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/write.go b/write.go
index baa5e6e..2d439de 100644
--- a/write.go
+++ b/write.go
@@ -246,7 +246,13 @@ func (c *Conn) writeFrame(ctx context.Context, fin bool, flate bool, opcode opco
 	if err != nil {
 		return 0, err
 	}
-	defer c.writeFrameMu.unlock()
+	defer func() {
+		// We leave it locked when writing the close frame to avoid
+		// any other goroutine writing any other frame.
+		if opcode != opClose {
+			c.writeFrameMu.unlock()
+		}
+	}()
 
 	select {
 	case <-c.closed:
-- 
GitLab