Fix memory leak in file analyzer.

This undoes the changes applied in merge 9db27a6d60
and goes back to the state in the branch as of the merge 5ab3b86.

Getting rid of the additional layer of removing analyzers and just
keeping them in the set introduced subtle differences in behavior since
a few calls were still passed along. Skipping all of these with SetSkip
introduced yet other subtle behavioral differences.
This commit is contained in:
Johanna Amann 2017-02-04 16:47:07 -08:00
parent 7beac6e404
commit 1de6cfc2e3
3 changed files with 17 additions and 2 deletions

View file

@ -129,11 +129,12 @@ bool AnalyzerSet::Remove(file_analysis::Tag tag, HashKey* key)
file->GetID().c_str(),
file_mgr->GetComponentName(tag).c_str());
a->Done();
// We don't delete the analyzer object right here because the remove
// operation may execute at a time when it can still be accessed.
// Instead we let disable it; it will be deleted together with the AnalyzerSet.
a->SetSkip(true);
// Instead we let the file know to delete the analyzer later.
file->DoneWithAnalyzer(a);
return true;
}