On Wed, Apr 13, 2022 at 12:27 PM Tadeusz Struk tadeusz.struk@linaro.org wrote:
On 4/13/22 12:07, Andrii Nakryiko wrote:
it would be ideal if detach would never fail, but it would require some kind of prealloc, on attach maybe? Another option would be to minimize the probability
We allocate new arrays in update_effective_progs() under assumption that we might need to grow the array because we use update_effective_progs() for attachment. But for detachment we know that we definitely don't need to increase the size, we need to remove existing element only, thus shrinking the size.
Normally we'd reallocate the array to shrink it (and that's why we use update_effective_progs() and allocate memory), but we can also have a fallback path for detachment only to reuse existing effective arrays and just shift all the elements to the right from the element that's being removed. We'll leave NULL at the end, but that's much better than error out. Subsequent attachment or detachment will attempt to properly size and reallocate everything.
So I think that should be the fix, if you'd be willing to work on it.
That makes it much easier then. I will change it so that there is no alloc needed on the detach path. Thanks for the clarification.
Keep in mind that we probably want to do normal alloc-based detach first anyways, if it works. It will keep effective arrays minimally sized. This additional detach specific logic should be a fall back path if the normal way doesn't work.
-- Thanks, Tadeusz