good morning!!!!

Skip to content
Snippets Groups Projects
Unverified Commit 02861b47 authored by Anmol Sethi's avatar Anmol Sethi Committed by GitHub
Browse files

Merge pull request #238 from nhooyr/dev

Fix deadlock introduced in v1.8.5
parents 34417b26 03cca81f
No related branches found
No related tags found
No related merge requests found
......@@ -6,7 +6,7 @@ main() {
./ci/fmt.sh
./ci/lint.sh
./ci/test.sh
./ci/test.sh "$@"
}
main "$@"
......@@ -246,13 +246,24 @@ func (c *Conn) writeFrame(ctx context.Context, fin bool, flate bool, opcode opco
if err != nil {
return 0, err
}
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()
defer c.writeFrameMu.unlock()
// If the state says a close has already been written, we wait until
// the connection is closed and return that error.
//
// However, if the frame being written is a close, that means its the close from
// the state being set so we let it go through.
c.closeMu.Lock()
wroteClose := c.wroteClose
c.closeMu.Unlock()
if wroteClose && opcode != opClose {
select {
case <-ctx.Done():
return 0, ctx.Err()
case <-c.closed:
return 0, c.closeErr
}
}()
}
select {
case <-c.closed:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment