websocket icon indicating copy to clipboard operation
websocket copied to clipboard

Data race on `Conn.closeErr`

Open haha454 opened this issue 1 year ago • 1 comments

When I run my go program with race detector enabled, following logs were observed.

WARNING: DATA RACE
local-setup-websocket-api-1  | Write at 0x00c0002e31b0 by goroutine 129:
local-setup-websocket-api-1  |   nhooyr.io/websocket.(*Conn).setCloseErrLocked()
local-setup-websocket-api-1  |       /go/pkg/mod/nhooyr.io/[email protected]/close.go:288 +0xd0
local-setup-websocket-api-1  |   nhooyr.io/websocket.(*Conn).setCloseErr()
local-setup-websocket-api-1  |       /go/pkg/mod/nhooyr.io/[email protected]/close.go:282 +0x4c
local-setup-websocket-api-1  |   nhooyr.io/websocket.(*Conn).timeoutLoop()
local-setup-websocket-api-1  |       /go/pkg/mod/nhooyr.io/[email protected]/conn.go:190 +0x224
local-setup-websocket-api-1  |   nhooyr.io/websocket.newConn.func2()
local-setup-websocket-api-1  |       /go/pkg/mod/nhooyr.io/[email protected]/conn.go:137 +0x80
local-setup-websocket-api-1  |
local-setup-websocket-api-1  | Previous read at 0x00c0002e31b0 by goroutine 165:
local-setup-websocket-api-1  |   nhooyr.io/websocket.(*Conn).CloseNow()
local-setup-websocket-api-1  |       /go/pkg/mod/nhooyr.io/[email protected]/close.go:117 +0x138
...
...

Apparently it's because when it's being set, it's protected by c.closeMu. https://github.com/nhooyr/websocket/blob/e3a2d32f704fb06c439e56d2a85334de04b50d32/close.go#L288

However it's not when it's being read. https://github.com/nhooyr/websocket/blob/e3a2d32f704fb06c439e56d2a85334de04b50d32/close.go#L117

haha454 avatar Feb 22 '24 15:02 haha454

I realise there is a PR #427 for it.

haha454 avatar Feb 22 '24 15:02 haha454

Thanks for reporting. I've fixed this in #427. Please review and let me know if you see anything else.

nhooyr avatar Apr 05 '24 23:04 nhooyr

Sorry for the delay. Fixed by #427.

nhooyr avatar Apr 07 '24 15:04 nhooyr