func()

in linux/handler.go [143:168]


func (h *KeyHandler) nextAvailable() (tpmutil.Handle, error) {
	l := len(h.handles) + len(h.inFlightHandles)
	if l == 0 {
		return minValidHandle, nil
	}
	if tpmutil.Handle(l) >= maxValidHandle-minValidHandle+1 {
		return 0, fmt.Errorf("no more key handles available")
	}

	keys := handlesToSlice(h.handles, nil)
	keys = handlesToSlice(h.inFlightHandles, keys)

	sort.Slice(keys, func(i, j int) bool {
		return keys[i] < keys[j]
	})

	ret := keys[0]
	for _, key := range keys {
		if ret != key {
			return ret, nil
		}
		ret++
	}

	return ret, nil
}