withZoneArena<R> function
Creates a zoned Arena to manage native resources.
The arena is available through zoneArena.
If the isolate is shut down, through Isolate.kill()
, resources are not
cleaned up.
Implementation
R withZoneArena<R>(R Function() computation,
[Allocator wrappedAllocator = calloc]) {
final arena = Arena(wrappedAllocator);
final arenaHolder = [arena];
var isAsync = false;
try {
return runZoned(() {
final result = computation();
if (result is Future) {
isAsync = true;
return result.whenComplete(arena.releaseAll) as R;
}
return result;
}, zoneValues: {#_arena: arenaHolder});
} finally {
if (!isAsync) {
arena.releaseAll();
arenaHolder.clear();
}
}
}