diff options
Diffstat (limited to 'vendor/codeberg.org/gruf/go-structr/item.go')
-rw-r--r-- | vendor/codeberg.org/gruf/go-structr/item.go | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/vendor/codeberg.org/gruf/go-structr/item.go b/vendor/codeberg.org/gruf/go-structr/item.go index 3191f2beb..6178e18e3 100644 --- a/vendor/codeberg.org/gruf/go-structr/item.go +++ b/vendor/codeberg.org/gruf/go-structr/item.go @@ -24,18 +24,22 @@ var indexed_item_pool sync.Pool func new_indexed_item() *indexed_item { v := indexed_item_pool.Get() if v == nil { - v = new(indexed_item) + i := new(indexed_item) + i.elem.data = unsafe.Pointer(i) + v = i } item := v.(*indexed_item) - ptr := unsafe.Pointer(item) - item.elem.data = ptr return item } // free_indexed_item releases the indexed_item. func free_indexed_item(item *indexed_item) { - item.elem.data = nil - item.indexed = item.indexed[:0] + if len(item.indexed) > 0 || + item.elem.next != nil || + item.elem.prev != nil { + should_not_reach() + return + } item.data = nil indexed_item_pool.Put(item) } @@ -50,7 +54,7 @@ func (i *indexed_item) drop_index(entry *index_entry) { continue } - // Move all index entries down + reslice. + // Reslice index entries minus 'x'. _ = copy(i.indexed[x:], i.indexed[x+1:]) i.indexed[len(i.indexed)-1] = nil i.indexed = i.indexed[:len(i.indexed)-1] |