36 lines
1.4 KiB
Markdown
36 lines
1.4 KiB
Markdown
# Bug List
|
|
|
|
## Open
|
|
|
|
### Bug 1 — `WsSendToUser`: sends message to sender, not recipient
|
|
**File:** `wsServer.go:86`
|
|
`to *User` parameter is never used — message is sent back to `from` instead.
|
|
```go
|
|
sendMessageCloseIfTimeout(from, &msg) // should be `to`
|
|
```
|
|
|
|
### Bug 2 — `ServeWsConnection`: `ignoreCache` captured by value in defer
|
|
**File:** `wsServer.go:30`
|
|
`ignoreCache` is `false` at defer registration; setting it to `true` later has no effect.
|
|
The user is always evicted from cache on disconnect.
|
|
```go
|
|
defer closeConnection(&user, ignoreCache) // wrong
|
|
defer func() { closeConnection(&user, ignoreCache) }() // correct
|
|
```
|
|
|
|
### Bug 3 — Deadlock in `sendToAllMessageCloseIfTimeout`
|
|
**File:** `wsServer.go:72`, `cache.go:52`
|
|
`sendToAllMessageCloseIfTimeout` holds `mu.RLock()`, calls `sendMessageCloseIfTimeout`,
|
|
which on timeout calls `closeConnection` → `CacheDeleteUser` → `mu.Lock()`.
|
|
Upgrading RLock to write Lock deadlocks.
|
|
|
|
### Bug 4 — `closeConnection`: nil `WsConn` not guarded
|
|
**File:** `wsServer.go:179`
|
|
`user.WsConn.CloseNow()` panics if `WsConn` is nil (e.g. unauthenticated user).
|
|
`sendMessageCloseIfTimeout` guards against this but `closeConnection` does not.
|
|
|
|
### Bug 5 — `HttpHandleUserAcceptConnection`: potential nil dereference
|
|
**File:** `http.go:410`
|
|
`target.Connections[user.Id].IsAccepted = true` panics if the entry is missing
|
|
(DB inconsistency). The sender side is guarded but the recipient side is not.
|