| ... | @@ -53,7 +53,7 @@ const min_class = math.log2(@sizeOf(usize)); | ... | @@ -53,7 +53,7 @@ const min_class = math.log2(@sizeOf(usize)); |
| 53 | const size_class_count = math.log2(slab_len) - min_class; | 53 | const size_class_count = math.log2(slab_len) - min_class; |
| 54 | /// When a freelist length exceeds this number, a `free` will rotate up to | 54 | /// When a freelist length exceeds this number, a `free` will rotate up to |
| 55 | /// `max_free_search` times before pushing. | 55 | /// `max_free_search` times before pushing. |
| 56 | const max_freelist_len: u8 = 16; | 56 | const max_freelist_len: u8 = 255; |
| 57 | const max_free_search = 1; | 57 | const max_free_search = 1; |
| 58 | /// Before mapping a fresh page, `alloc` will rotate this many times. | 58 | /// Before mapping a fresh page, `alloc` will rotate this many times. |
| 59 | const max_alloc_search = 1; | 59 | const max_alloc_search = 1; |
| ... | @@ -223,6 +223,7 @@ fn free(context: *anyopaque, memory: []u8, alignment: mem.Alignment, ra: usize) | ... | @@ -223,6 +223,7 @@ fn free(context: *anyopaque, memory: []u8, alignment: mem.Alignment, ra: usize) |
| 223 | if (freelist_len < max_freelist_len) { | 223 | if (freelist_len < max_freelist_len) { |
| 224 | @branchHint(.likely); | 224 | @branchHint(.likely); |
| 225 | defer t.unlock(); | 225 | defer t.unlock(); |
| | 226 | t.freelist_lens[class] = freelist_len +| 1; |
| 226 | node.* = t.frees[class]; | 227 | node.* = t.frees[class]; |
| 227 | t.frees[class] = @intFromPtr(node); | 228 | t.frees[class] = @intFromPtr(node); |
| 228 | return; | 229 | return; |