diff --git a/weed/util/mem/slot_pool.go b/weed/util/mem/slot_pool.go index d5a55f23f..5bd759ab7 100644 --- a/weed/util/mem/slot_pool.go +++ b/weed/util/mem/slot_pool.go @@ -14,7 +14,7 @@ const ( func bitCount(size int) (count int) { for ; size > min_size; count++ { - size = size >> 1 + size = (size + 1) >> 1 } return } diff --git a/weed/util/mem/slot_pool_test.go b/weed/util/mem/slot_pool_test.go index 114951522..44f9ec004 100644 --- a/weed/util/mem/slot_pool_test.go +++ b/weed/util/mem/slot_pool_test.go @@ -1,6 +1,7 @@ package mem import ( + "github.com/stretchr/testify/assert" "testing" ) @@ -25,6 +26,16 @@ func TestAllocateFree(t *testing.T) { } +func TestAllocateFreeEdgeCases(t *testing.T) { + assert.Equal(t, 1, bitCount(2048)) + assert.Equal(t, 2, bitCount(2049)) + + buf := Allocate(2048) + Free(buf) + buf = Allocate(2049) + Free(buf) +} + func TestBitCount(t *testing.T) { count := bitCount(12) if count != 0 {