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();
}
}
}