diff options
author | 2015-10-12 22:26:08 +0000 | |
---|---|---|
committer | 2015-10-13 01:04:17 +0000 | |
commit | 829d118bb5621f5e908e96094fa15b8669dced1c (patch) | |
tree | 875943f3b0ba23e30ea5c537ff8a22edfd733347 /src/main | |
parent | ce3f8ed44b9983711ddcf30c4fecb53799e3f8b4 (diff) |
Fix PackageFunction#loadPackage preprocessing result cache memory leak on error from SkylarkImportResult dep.
This is part of a series of changes with the net result being that we open, read, and parse each BUILD file exactly once.
--
MOS_MIGRATED_REVID=105253634
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java index 78090e0a83..c68e7eb5b4 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java @@ -914,14 +914,19 @@ public class PackageFunction implements SkyFunction { preprocessCache.put(packageId, preprocessingResult); } - SkylarkImportResult importResult = - discoverSkylarkImports( - buildFilePath, - buildFileFragment, - packageId, - env, - preprocessingResult.result, - preludeStatements); + SkylarkImportResult importResult; + try { + importResult = discoverSkylarkImports( + buildFilePath, + buildFileFragment, + packageId, + env, + preprocessingResult.result, + preludeStatements); + } catch (PackageFunctionException | InterruptedException e) { + preprocessCache.invalidate(packageId); + throw e; + } if (importResult == null) { return null; } |