diff options
author | Stefan Lay | 2012-05-09 15:04:43 +0000 |
---|---|---|
committer | Matthias Sohn | 2012-05-11 22:24:06 +0000 |
commit | 62f7bfff93f5a53e2281af52eaa479c4998e1db6 (patch) | |
tree | 363d8c25226b723647d809397a66e8131bf72165 /org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GenerateHistoryJob.java | |
parent | 2513d3008c301a6011f1d631b60035aa43ae9c72 (diff) | |
download | egit-62f7bfff93f5a53e2281af52eaa479c4998e1db6.tar.gz egit-62f7bfff93f5a53e2281af52eaa479c4998e1db6.tar.xz egit-62f7bfff93f5a53e2281af52eaa479c4998e1db6.zip |
Fix memory leak in GitHistoryPage
When a GenerateHistoryJob was cancelled because a new input was set the
SWTCommitList was not deregistered as DisposeListener. The List held
references to all SWTCommits which could consume several hundreds of MB
for large repos.
Change-Id: I95b3f79ce883bb65cc168d7288040826d6fde514
Signed-off-by: Stefan Lay <stefan.lay@sap.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Diffstat (limited to 'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GenerateHistoryJob.java')
-rw-r--r-- | org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GenerateHistoryJob.java | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GenerateHistoryJob.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GenerateHistoryJob.java index 1580e240c7..822624b913 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GenerateHistoryJob.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GenerateHistoryJob.java @@ -14,7 +14,9 @@ import java.text.MessageFormat; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.egit.ui.Activator; import org.eclipse.egit.ui.JobFamilies; import org.eclipse.egit.ui.UIPreferences; @@ -24,6 +26,7 @@ import org.eclipse.jgit.revwalk.RevFlag; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; class GenerateHistoryJob extends Job { private static final int BATCH_SIZE = 256; @@ -132,6 +135,29 @@ class GenerateHistoryJob extends Job { } } + void release() { + if (getState() == Job.NONE) + dispose(); + else + addJobChangeListener(new JobChangeAdapter() { + @Override + public void done(final IJobChangeEvent event) { + dispose(); + } + }); + + } + + private void dispose() { + walk.release(); + Display.getDefault().asyncExec(new Runnable() { + + public void run() { + allCommits.dispose(); + } + }); + } + @Override public boolean belongsTo(Object family) { if (family.equals(JobFamilies.GENERATE_HISTORY)) |