Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Issue 1650873002: Fix memory leak in incremental resolver (Closed)

Created:
4 years, 10 months ago by skybrian
Modified:
4 years, 10 months ago
CC:
reviews_dartlang.org
Base URL:
git@github.com:dart-lang/sdk.git@master
Target Ref:
refs/heads/master
Visibility:
Public.

Description

Fix memory leak in incremental resolver Moving an element that's in the AnalysisCache causes it to leak because operator== and hashCode are based on its location. To make sure we detect this, added a "frozen" flag to Element. It's set when the element is used as a key in the AnalysisCache. Cleanup: in IncrementalResolver, make all fields final that are never changed. BUG= R=brianwilkerson@google.com Committed: https://github.com/dart-lang/sdk/commit/54ee3eefd1a0e3ce12ba6d5fd03a4213dabccdb2

Patch Set 1 #

Total comments: 18

Patch Set 2 : add unit test #

Patch Set 3 : revert frozen flag #

Patch Set 4 : simplify and improve tests #

Total comments: 5
Unified diffs Side-by-side diffs Delta from patch set Stats (+89 lines, -29 lines) Patch
M pkg/analyzer/lib/src/context/context.dart View 1 chunk +1 line, -0 lines 0 comments Download
M pkg/analyzer/lib/src/generated/incremental_resolver.dart View 1 2 3 10 chunks +46 lines, -27 lines 0 comments Download
M pkg/analyzer/test/generated/incremental_resolver_test.dart View 1 2 3 8 chunks +42 lines, -2 lines 5 comments Download

Messages

Total messages: 16 (2 generated)
skybrian
4 years, 10 months ago (2016-01-31 06:56:26 UTC) #2
Brian Wilkerson
https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/dart/element/element.dart File pkg/analyzer/lib/src/dart/element/element.dart (right): https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/dart/element/element.dart#newcode1713 pkg/analyzer/lib/src/dart/element/element.dart:1713: bool frozen = false; This would be better implemented ...
4 years, 10 months ago (2016-02-01 14:58:17 UTC) #3
scheglov
https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/dart/element/element.dart File pkg/analyzer/lib/src/dart/element/element.dart (right): https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/dart/element/element.dart#newcode1847 pkg/analyzer/lib/src/dart/element/element.dart:1847: _checkNotFrozen(); The location of an Element consists of identifiers ...
4 years, 10 months ago (2016-02-01 16:01:25 UTC) #4
Brian Wilkerson
https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/dart/element/element.dart File pkg/analyzer/lib/src/dart/element/element.dart (right): https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/dart/element/element.dart#newcode1847 pkg/analyzer/lib/src/dart/element/element.dart:1847: _checkNotFrozen(); > So, in order to guarantee that the ...
4 years, 10 months ago (2016-02-01 16:11:58 UTC) #5
skybrian
On 2016/02/01 16:11:58, Brian Wilkerson wrote: > https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/dart/element/element.dart > File pkg/analyzer/lib/src/dart/element/element.dart (right): > > https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/dart/element/element.dart#newcode1847 ...
4 years, 10 months ago (2016-02-01 22:25:26 UTC) #6
skybrian
https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/generated/incremental_resolver.dart File pkg/analyzer/lib/src/generated/incremental_resolver.dart (right): https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/generated/incremental_resolver.dart#newcode2068 pkg/analyzer/lib/src/generated/incremental_resolver.dart:2068: cache.remove(element); On 2016/02/01 14:58:16, Brian Wilkerson wrote: > This ...
4 years, 10 months ago (2016-02-01 22:26:33 UTC) #7
skybrian
https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/dart/element/element.dart File pkg/analyzer/lib/src/dart/element/element.dart (right): https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/dart/element/element.dart#newcode2031 pkg/analyzer/lib/src/dart/element/element.dart:2031: //print("$this at $location is frozen and can't be mutated"); ...
4 years, 10 months ago (2016-02-02 01:16:54 UTC) #8
skybrian
Added a test reproducing the cache entry leak. I could take out the frozen flag ...
4 years, 10 months ago (2016-02-02 02:12:19 UTC) #9
Brian Wilkerson
https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/dart/element/element.dart File pkg/analyzer/lib/src/dart/element/element.dart (right): https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/dart/element/element.dart#newcode1713 pkg/analyzer/lib/src/dart/element/element.dart:1713: bool frozen = false; > That apparently makes it ...
4 years, 10 months ago (2016-02-02 16:32:06 UTC) #10
skybrian
Okay, here is a simplified version that I'd like to commit. https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/generated/incremental_resolver.dart File pkg/analyzer/lib/src/generated/incremental_resolver.dart (right): ...
4 years, 10 months ago (2016-02-02 22:42:11 UTC) #11
Brian Wilkerson
LGTM https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/generated/incremental_resolver.dart File pkg/analyzer/lib/src/generated/incremental_resolver.dart (right): https://codereview.chromium.org/1650873002/diff/1/pkg/analyzer/lib/src/generated/incremental_resolver.dart#newcode1040 pkg/analyzer/lib/src/generated/incremental_resolver.dart:1040: _typeSystem = definingUnit.context.typeSystem, > Okay, assuming by "leave ...
4 years, 10 months ago (2016-02-02 22:51:14 UTC) #12
scheglov
https://codereview.chromium.org/1650873002/diff/60001/pkg/analyzer/test/generated/incremental_resolver_test.dart File pkg/analyzer/test/generated/incremental_resolver_test.dart (right): https://codereview.chromium.org/1650873002/diff/60001/pkg/analyzer/test/generated/incremental_resolver_test.dart#newcode128 pkg/analyzer/test/generated/incremental_resolver_test.dart:128: if (cache.get(key) == null) { On 2016/02/02 22:51:14, Brian ...
4 years, 10 months ago (2016-02-02 23:04:26 UTC) #13
skybrian
https://codereview.chromium.org/1650873002/diff/60001/pkg/analyzer/test/generated/incremental_resolver_test.dart File pkg/analyzer/test/generated/incremental_resolver_test.dart (right): https://codereview.chromium.org/1650873002/diff/60001/pkg/analyzer/test/generated/incremental_resolver_test.dart#newcode128 pkg/analyzer/test/generated/incremental_resolver_test.dart:128: if (cache.get(key) == null) { On 2016/02/02 23:04:25, scheglov ...
4 years, 10 months ago (2016-02-02 23:27:02 UTC) #14
skybrian
4 years, 10 months ago (2016-02-02 23:40:40 UTC) #16
Message was sent while issue was closed.
Committed patchset #4 (id:60001) manually as
54ee3eefd1a0e3ce12ba6d5fd03a4213dabccdb2 (presubmit successful).

Powered by Google App Engine
This is Rietveld 408576698