diff --git a/packetcache/packetcache.go b/packetcache/packetcache.go index d03d0d7..4be0beb 100644 --- a/packetcache/packetcache.go +++ b/packetcache/packetcache.go @@ -8,8 +8,9 @@ const BufSize = 1500 type entry struct { seqno uint16 - length int + length uint16 buf [BufSize]byte + pad [32 - (BufSize+4)%32]byte // avoid false sharing } type Cache struct { @@ -40,7 +41,7 @@ func seqnoInvalid(seqno, reference uint16) bool { return false } - if reference - seqno > 0x100 { + if reference-seqno > 0x100 { return true } @@ -99,7 +100,7 @@ func (cache *Cache) Store(seqno uint16, buf []byte) uint16 { cache.entries[cache.tail].seqno = seqno copy(cache.entries[cache.tail].buf[:], buf) - cache.entries[cache.tail].length = len(buf) + cache.entries[cache.tail].length = uint16(len(buf)) cache.tail = (cache.tail + 1) % len(cache.entries) return cache.first @@ -146,7 +147,7 @@ func (cache *Cache) BitmapGet() (bool, uint16, uint16) { return false, first, 0 } - for bitmap & 1 == 0 { + for bitmap&1 == 0 { bitmap >>= 1 first++ } diff --git a/packetcache/packetcache_test.go b/packetcache/packetcache_test.go index a58862c..cef3a11 100644 --- a/packetcache/packetcache_test.go +++ b/packetcache/packetcache_test.go @@ -4,6 +4,7 @@ import ( "bytes" "math/rand" "testing" + "unsafe" "github.com/pion/rtcp" ) @@ -54,6 +55,16 @@ func TestCacheOverflow(t *testing.T) { } } +func TestCacheAlignment(t *testing.T) { + cache := New(16) + for i := range cache.entries { + p := unsafe.Pointer(&cache.entries[i]) + if uintptr(p) % 32 != 0 { + t.Errorf("%v: alignment %v", i, uintptr(p) % 32) + } + } +} + func TestBitmap(t *testing.T) { value := uint64(0xcdd58f1e035379c0) packet := make([]byte, 1)