mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 11:58:13 +00:00
[VM/kernel] Clean up garbage in batch mode of gen_kernel
Kernel has a global variable globalDebuggingNames which contains NameSystem. NameSystem permanently holds certain kernel AST objects (via various Namers). Calling toString() on a kernel AST object may permanently add it to a global NameSystem, leaking memory. It becomes a problem when gen_kernel is used in batch mode by test tool. In such case, resident gen_kernel process is reused to perform multiple compilations, and globalDebuggingNames accumulates garbage kernel AST objects from finished compilations. In this CL, globalDebuggingNames is reset after each compilation in batch mode of gen_kernel. Change-Id: Ie05635750fb149bb0e32415f03802e0c66f06a27 Reviewed-on: https://dart-review.googlesource.com/39883 Reviewed-by: Vyacheslav Egorov <vegorov@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
This commit is contained in:
parent
307177ff9c
commit
357f457059
|
@ -12,6 +12,8 @@ import 'package:kernel/kernel.dart' show Program;
|
|||
import 'package:kernel/src/tool/batch_util.dart' as batch_util;
|
||||
import 'package:kernel/target/targets.dart' show TargetFlags;
|
||||
import 'package:kernel/target/vm.dart' show VmTarget;
|
||||
import 'package:kernel/text/ast_to_text.dart'
|
||||
show globalDebuggingNames, NameSystem;
|
||||
import 'package:vm/kernel_front_end.dart' show compileToKernel, ErrorDetector;
|
||||
|
||||
final ArgParser _argParser = new ArgParser(allowTrailingOptions: true)
|
||||
|
@ -109,6 +111,10 @@ Future runBatchModeCompiler() async {
|
|||
// report the compilation result accordingly.
|
||||
//
|
||||
final exitCode = await compile(arguments);
|
||||
|
||||
// Re-create global NameSystem to avoid accumulating garbage.
|
||||
globalDebuggingNames = new NameSystem();
|
||||
|
||||
switch (exitCode) {
|
||||
case 0:
|
||||
return batch_util.CompilerOutcome.Ok;
|
||||
|
|
Loading…
Reference in a new issue