SPL bmalloc would randomly return already used memory again, due to
it being on the free_list even after returned. This appears to fix it
but unsure why.
Add spinlock around the slices as well, to protect the free_list list.
Missed spinlock destroy in garbage collector.