code: func (p *Pool) Put(bts []byte) {
  	hdr := *(*reflect.SliceHeader)(unsafe.Pointer(&bts))
  	ptr := hdr.Data - uintptr(guardSize)
  
  	g := (*guard)(unsafe.Pointer(ptr))
  	if g.magic != magic {
  		panic("unknown slice returned to the pool")
  	}
  	if n := atomic.AddInt32(&g.owners, -1); n < 0 {
  		panic("multiple Put() detected")
  	}
  
  	// Disable read and write on bytes memory pages. This will cause panic on
  	// incorrect access to returned slice.
  	mprotect(ptr, false, false, g.size)
  
  	runtime.SetFinalizer(&bts, func(b *[]byte) {
  		mprotect(ptr, true, true, g.size)
  		free(*(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{
  			Data: ptr,
  			Len:  g.size,
  			Cap:  g.size,
  		})))
  	})
  }
docs: // Put returns given slice to reuse pool.