From 2fc8b7b788ae3b5a83829e2eda68ed0b12745e93 Mon Sep 17 00:00:00 2001
From: Denis Isaev <denis@golangci.com>
Date: Mon, 23 Sep 2019 21:40:27 +0300
Subject: [PATCH] Drop memory usage of go/analysis linters 5x

Set analysis pass results to nil early to garbage collect them
soon.
Memory can be reduced for the following linters:
  - staticcheck
  - stylecheck
  - gosimple
  - govet
  - bodyclose
  - any future go/analysis linter

Relates: #712, #634, #628, #598, #509, #483, #337
---
 pkg/golinters/goanalysis/runner.go | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/pkg/golinters/goanalysis/runner.go b/pkg/golinters/goanalysis/runner.go
index f3850ab8..4dee44c8 100644
--- a/pkg/golinters/goanalysis/runner.go
+++ b/pkg/golinters/goanalysis/runner.go
@@ -872,6 +872,13 @@ func (lp *loadingPackage) decUse() {
 		pass.ImportPackageFact = nil
 		pass.ExportPackageFact = nil
 		act.pass = nil
+		act.deps = nil
+		if act.result != nil {
+			if isMemoryDebug {
+				debugf("%s: decUse: nilling act result of size %d bytes", act, sizeOfValueTreeBytes(act.result))
+			}
+			act.result = nil
+		}
 	}
 
 	lp.pkg.Syntax = nil
@@ -899,13 +906,6 @@ func (lp *loadingPackage) decUse() {
 		}
 		act.packageFacts = nil
 		act.objectFacts = nil
-		act.deps = nil
-		if act.result != nil {
-			if isMemoryDebug {
-				debugf("%s: decUse: nilling act result of size %d bytes", act, sizeOfValueTreeBytes(act.result))
-			}
-			act.result = nil
-		}
 	}
 	lp.actions = nil
 }