in lib/src/arena.dart [143:165]
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();
}
}
}