ralloc: Implement a new ralloc_adopt() API.
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 28 Mar 2015 02:24:33 +0000 (19:24 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 2 Apr 2015 21:19:41 +0000 (14:19 -0700)
commit33f0f68d590a460f84a0df0de10f29c4a582d7e7
treec9a0c4a69f1cc18bae2815d3c6f77e2f1f692b3e
parentca3b4d6d17a0f95b287e87888c9d893be94f0301
ralloc: Implement a new ralloc_adopt() API.

ralloc_adopt() reparents all children from one context to another.
Conceptually, ralloc_adopt(new_ctx, old_ctx) behaves like this
pseudocode:

   foreach child of old_ctx:
      ralloc_steal(new_ctx, child)

However, ralloc provides no way to iterate over a memory context's
children, and ralloc_adopt does this task more efficiently anyway.

One potential use of this is to implement a memory-sweeper pass: first,
steal all of a context's memory to a temporary context.  Then, walk over
anything that should be kept, and ralloc_steal it back to the original
context.  Finally, free the temporary context.  This works when the
context is something that can't be freed (i.e. an important structure).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
src/util/ralloc.c
src/util/ralloc.h