mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-17 09:37:02 +00:00
* fix whitespace warnings Signed-off-by: James Hillyerd <james@hillyerd.com> * fix a number of typos Signed-off-by: James Hillyerd <james@hillyerd.com> * fix many cosmetic linter warnings Signed-off-by: James Hillyerd <james@hillyerd.com> --------- Signed-off-by: James Hillyerd <james@hillyerd.com>
24 lines
570 B
Go
24 lines
570 B
Go
package storage
|
|
|
|
import (
|
|
"strconv"
|
|
"sync"
|
|
)
|
|
|
|
// HashLock holds a fixed length array of mutexes. This approach allows concurrent mailbox
|
|
// access in most cases without requiring an infinite number of mutexes.
|
|
type HashLock [4096]sync.RWMutex
|
|
|
|
// Get returns a RWMutex based on the first 12 bits of the mailbox hash. Hash must be a hexadecimal
|
|
// string of three or more characters.
|
|
func (h *HashLock) Get(hash string) *sync.RWMutex {
|
|
if len(hash) < 3 {
|
|
return nil
|
|
}
|
|
i, err := strconv.ParseInt(hash[0:3], 16, 0)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
return &h[i]
|
|
}
|