withZoneArena<R> function
Creates a zoned Arena to manage native resources.
The arena is availabe 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);
var arenaHolder = [arena];
bool 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();
}
}
}