похоже на ошибку использования мьютекса или самодельном мьютексе с багом.
тк кейс обычно Lock(), Unlock(),
то двойной Unlock может быть либо если Lock() не атомарный и несколько рутин его успешно вызвали (самодельный кривой мьютекс?),
либо если в коде Unlock вызывается без нужды (ошибка использования).
Если нужно, чтобы Lock() был неблокирующим для более чем 1 горутины, то это семафор и он пишется на буфферизованном канале двумя строками кода.
Хотя сейчас вроде и в sync пакете есть реализация из коробки -
https://pkg.go.dev/golang.org/x/sync@v0.0.0-20210220032951-036812b2e83c/semaphore