Bug 64123 - Memory leak in WorkbenchSiteProgressService
Summary: Memory leak in WorkbenchSiteProgressService
Status: VERIFIED FIXED
Alias: None
Product: Platform
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 3.0   Edit
Hardware: PC Windows XP
: P1 critical (vote)
Target Milestone: 3.0 RC1   Edit
Assignee: Tod Creasey CLA
QA Contact:
URL:
Whiteboard:
Keywords: performance
Depends on:
Blocks:
 
Reported: 2004-05-26 10:45 EDT by Michael Valenta CLA
Modified: 2004-05-31 11:53 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Valenta CLA 2004-05-26 10:45:06 EDT
The dispose method of WorkbenchSiteProgressService is the following. Notide 
that if the waitCursor is null, the listener is not returned. If I close all 
open instances of the sync view, the waitCursor is null so a reference to the 
sync view stays around. The removeListener should either be done first or in a 
finally block.

	public void dispose() {
		if (updateJob != null)
			updateJob.cancel();
		if (waitCursor == null)
			return;
		waitCursor.dispose();
		waitCursor = null;
		ProgressManager.getInstance().removeListener(this);
	}
Comment 1 Jean-Michel Lemieux CLA 2004-05-26 11:41:40 EDT
As a result the synchronize view is being leaked all the time. Marking critical
since this must be fixed for 3.0. 

Here is an example of the leak:

GC Roots -> Instances of org.eclipse.team.ui.synchronize.ISynchronizeView and
subclasses [1 object]: Reverse Paths

  |
  +---org.eclipse.team.internal.ui.synchronize.SynchronizeView (#015b011c)
    |
    +---part of org.eclipse.ui.internal.ViewSite (#01e03412)
    | |
    | +---site of org.eclipse.ui.internal.progress.WorkbenchSiteProgressService
(#0127e2ee)
    |   |
    |   +---key of java.util.HashMap$Entry (#00923db4)
    |     |
    |     +---[11]  of java.util.HashMap$Entry[16] (#00d02a4e)
    |       |
    |       +---table of java.util.HashMap (#006ed953)
    |         |
    |         +---map of java.util.HashSet (#01feff10)
    |           |
    |           +---value of java.util.HashMap$Entry (#0193047b)
    |             |
    |             +---[2]  of java.util.HashMap$Entry[16] (#006ccb80)
    |               |
    |               +---table of java.util.HashMap (#00330ca6)
    |                 |
    |                 +---m of java.util.Collections$SynchronizedMap (#0020eaf2)
    |                   |
    |                   +---familyListeners of
org.eclipse.ui.internal.progress.ProgressManager (#0020cf5e)
    |                     |
    |                     +---singleton of
org.eclipse.ui.internal.progress.ProgressManager (#00e106fb)
    |
    +---this$0 of org.eclipse.ui.part.PageBookView$SelectionProvider (#01b70e1e)
    | |
    | +---selectionProvider of org.eclipse.ui.internal.ViewSite (#01e03412)
    |   |
    |   +---site of
org.eclipse.ui.internal.progress.WorkbenchSiteProgressService (#0127e2ee)
    |     |
    |     +---key of java.util.HashMap$Entry (#00923db4)
    |       |
    |       +---[11]  of java.util.HashMap$Entry[16] (#00d02a4e)
    |         |
    |         +---table of java.util.HashMap (#006ed953)
    |           |
    |           +---map of java.util.HashSet (#01feff10)
    |             |
    |             +---value of java.util.HashMap$Entry (#0193047b)
    |               |
    |               +---[2]  of java.util.HashMap$Entry[16] (#006ccb80)
    |                 |
    |                 +---table of java.util.HashMap (#00330ca6)
    |                   |
    |                   +---m of java.util.Collections$SynchronizedMap (#0020eaf2)
    |                     |
    |                     +---familyListeners of
org.eclipse.ui.internal.progress.ProgressManager (#0020cf5e)
    |                       |
    |                       +---singleton of
org.eclipse.ui.internal.progress.ProgressManager (#00e106fb)
    |
    +---fView of
org.eclipse.team.internal.ui.synchronize.actions.SynchronizePageDropDownAction
(#00ffed11)
    | |
    | +---action of org.eclipse.jface.action.ActionContributionItem (#01b619cf)
    |   |
    |   +---[0]  of java.lang.Object[16] (#00bffca1)
    |     |
    |     +---elementData of java.util.ArrayList (#00899db0)
    |       |
    |       +---contributions of
org.eclipse.ui.internal.ViewPane$PaneToolBarManager (#00b70bf2)
    |         |
    |         +---isvToolBarMgr of org.eclipse.ui.internal.ViewPane (#004f439d)
    |           |
    |           +---pane of org.eclipse.ui.internal.ViewSite (#01e03412)
    |             |
    |             +---site of
org.eclipse.ui.internal.progress.WorkbenchSiteProgressService (#0127e2ee)
    |               |
    |               +---key of java.util.HashMap$Entry (#00923db4)
    |                 |
    |                 +---[11]  of java.util.HashMap$Entry[16] (#00d02a4e)
    |                   |
    |                   +---table of java.util.HashMap (#006ed953)
    |                     |
    |                     +---map of java.util.HashSet (#01feff10)
    |                       |
    |                       +---value of java.util.HashMap$Entry (#0193047b)
    |                         |
    |                         +---[2]  of java.util.HashMap$Entry[16] (#006ccb80)
    |                           |
    |                           +---table of java.util.HashMap (#00330ca6)
    |                             |
    |                             +---m of java.util.Collections$SynchronizedMap
(#0020eaf2)
    |                               |
    |                               +---familyListeners of
org.eclipse.ui.internal.progress.ProgressManager (#0020cf5e)
    |                                 |
    |                                 +---singleton of
org.eclipse.ui.internal.progress.ProgressManager (#00e106fb)
    |
    +---view of
org.eclipse.team.internal.ui.synchronize.actions.RemoveSynchronizeParticipantAction
(#00a9c0dd)
    | |
    | +---action of org.eclipse.jface.action.ActionContributionItem (#0197cf84)
    |   |
    |   +---[0]  of java.lang.Object[10] (#003e97ca)
    |     |
    |     +---elementData of java.util.ArrayList (#00cfb92c)
    |       |
    |       +---contributions of
org.eclipse.ui.internal.ViewPane$PaneMenuManager (#01715c02)
    |         |
    |         +---isvMenuMgr of org.eclipse.ui.internal.ViewPane (#004f439d)
    |           |
    |           +---pane of org.eclipse.ui.internal.ViewSite (#01e03412)
    |             |
    |             +---site of
org.eclipse.ui.internal.progress.WorkbenchSiteProgressService (#0127e2ee)
    |               |
    |               +---key of java.util.HashMap$Entry (#00923db4)
    |                 |
    |                 +---[11]  of java.util.HashMap$Entry[16] (#00d02a4e)
    |                   |
    |                   +---table of java.util.HashMap (#006ed953)
    |                     |
    |                     +---map of java.util.HashSet (#01feff10)
    |                       |
    |                       +---value of java.util.HashMap$Entry (#0193047b)
    |                         |
    |                         +---[2]  of java.util.HashMap$Entry[16] (#006ccb80)
    |                           |
    |                           +---table of java.util.HashMap (#00330ca6)
    |                             |
    |                             +---m of java.util.Collections$SynchronizedMap
(#0020eaf2)
    |                               |
    |                               +---familyListeners of
org.eclipse.ui.internal.progress.ProgressManager (#0020cf5e)
    |                                 |
    |                                 +---singleton of
org.eclipse.ui.internal.progress.ProgressManager (#00e106fb)
    |
    +---view of
org.eclipse.team.internal.ui.synchronize.actions.RemoveSynchronizeParticipantAction
(#00b4fce5)
      |
      +---action of org.eclipse.jface.action.ActionContributionItem (#01b8fe99)
        |
        +---[1]  of java.lang.Object[10] (#003e97ca)
          |
          +---elementData of java.util.ArrayList (#00cfb92c)
            |
            +---contributions of
org.eclipse.ui.internal.ViewPane$PaneMenuManager (#01715c02)
              |
              +---isvMenuMgr of org.eclipse.ui.internal.ViewPane (#004f439d)
                |
                +---pane of org.eclipse.ui.internal.ViewSite (#01e03412)
                  |
                  +---site of
org.eclipse.ui.internal.progress.WorkbenchSiteProgressService (#0127e2ee)
                    |
                    +---key of java.util.HashMap$Entry (#00923db4)
                      |
                      +---[11]  of java.util.HashMap$Entry[16] (#00d02a4e)
                        |
                        +---table of java.util.HashMap (#006ed953)
                          |
                          +---map of java.util.HashSet (#01feff10)
                            |
                            +---value of java.util.HashMap$Entry (#0193047b)
                              |
                              +---[2]  of java.util.HashMap$Entry[16] (#006ccb80)
                                |
                                +---table of java.util.HashMap (#00330ca6)
                                  |
                                  +---m of java.util.Collections$SynchronizedMap
(#0020eaf2)
                                    |
                                    +---familyListeners of
org.eclipse.ui.internal.progress.ProgressManager (#0020cf5e)
                                      |
                                      +---singleton of
org.eclipse.ui.internal.progress.ProgressManager (#00e106fb)


--------------------------------------------------------------------------------

GC Roots -> Instances of org.eclipse.team.ui.synchronize.ISynchronizeView and
subclasses [1 object]: Direct Paths

  |
  +---org.eclipse.ui.internal.progress.ProgressManager (#00e106fb)
    |
    +---singleton org.eclipse.ui.internal.progress.ProgressManager (#0020cf5e)
    | |
    | +---familyListeners java.util.Collections$SynchronizedMap (#0020eaf2)
    |   |
    |   +---m java.util.HashMap (#00330ca6)
    |     |
    |     +---table java.util.HashMap$Entry[16] (#006ccb80)
    |       |
    |       +---[2]  java.util.HashMap$Entry (#0193047b)
    |         |
    |         +---value java.util.HashSet (#01feff10)
    |           |
    |           +---map java.util.HashMap (#006ed953)
    |             |
    |             +---table java.util.HashMap$Entry[16] (#00d02a4e)
    |               |
    |               +---[11]  java.util.HashMap$Entry (#00923db4)
    |                 |
    |                 +---key
org.eclipse.ui.internal.progress.WorkbenchSiteProgressService (#0127e2ee)
    |                   |
    |                   +---site org.eclipse.ui.internal.ViewSite (#01e03412)
    |                     |
    |                     +---part
org.eclipse.team.internal.ui.synchronize.SynchronizeView (#015b011c)
    |
    +---singleton org.eclipse.ui.internal.progress.ProgressManager (#0020cf5e)
    | |
    | +---familyListeners java.util.Collections$SynchronizedMap (#0020eaf2)
    |   |
    |   +---m java.util.HashMap (#00330ca6)
    |     |
    |     +---table java.util.HashMap$Entry[16] (#006ccb80)
    |       |
    |       +---[2]  java.util.HashMap$Entry (#0193047b)
    |         |
    |         +---value java.util.HashSet (#01feff10)
    |           |
    |           +---map java.util.HashMap (#006ed953)
    |             |
    |             +---table java.util.HashMap$Entry[16] (#00d02a4e)
    |               |
    |               +---[11]  java.util.HashMap$Entry (#00923db4)
    |                 |
    |                 +---key
org.eclipse.ui.internal.progress.WorkbenchSiteProgressService (#0127e2ee)
    |                   |
    |                   +---site org.eclipse.ui.internal.ViewSite (#01e03412)
    |                     |
    |                     +---selectionProvider
org.eclipse.ui.part.PageBookView$SelectionProvider (#01b70e1e)
    |                       |
    |                       +---this$0
org.eclipse.team.internal.ui.synchronize.SynchronizeView (#015b011c)
    |
    +---singleton org.eclipse.ui.internal.progress.ProgressManager (#0020cf5e)
    | |
    | +---familyListeners java.util.Collections$SynchronizedMap (#0020eaf2)
    |   |
    |   +---m java.util.HashMap (#00330ca6)
    |     |
    |     +---table java.util.HashMap$Entry[16] (#006ccb80)
    |       |
    |       +---[2]  java.util.HashMap$Entry (#0193047b)
    |         |
    |         +---value java.util.HashSet (#01feff10)
    |           |
    |           +---map java.util.HashMap (#006ed953)
    |             |
    |             +---table java.util.HashMap$Entry[16] (#00d02a4e)
    |               |
    |               +---[11]  java.util.HashMap$Entry (#00923db4)
    |                 |
    |                 +---key
org.eclipse.ui.internal.progress.WorkbenchSiteProgressService (#0127e2ee)
    |                   |
    |                   +---site org.eclipse.ui.internal.ViewSite (#01e03412)
    |                     |
    |                     +---pane org.eclipse.ui.internal.ViewPane (#004f439d)
    |                       |
    |                       +---isvToolBarMgr
org.eclipse.ui.internal.ViewPane$PaneToolBarManager (#00b70bf2)
    |                         |
    |                         +---contributions java.util.ArrayList (#00899db0)
    |                           |
    |                           +---elementData java.lang.Object[16] (#00bffca1)
    |                             |
    |                             +---[0] 
org.eclipse.jface.action.ActionContributionItem (#01b619cf)
    |                               |
    |                               +---action
org.eclipse.team.internal.ui.synchronize.actions.SynchronizePageDropDownAction
(#00ffed11)
    |                                 |
    |                                 +---fView
org.eclipse.team.internal.ui.synchronize.SynchronizeView (#015b011c)
    |
    +---singleton org.eclipse.ui.internal.progress.ProgressManager (#0020cf5e)
    | |
    | +---familyListeners java.util.Collections$SynchronizedMap (#0020eaf2)
    |   |
    |   +---m java.util.HashMap (#00330ca6)
    |     |
    |     +---table java.util.HashMap$Entry[16] (#006ccb80)
    |       |
    |       +---[2]  java.util.HashMap$Entry (#0193047b)
    |         |
    |         +---value java.util.HashSet (#01feff10)
    |           |
    |           +---map java.util.HashMap (#006ed953)
    |             |
    |             +---table java.util.HashMap$Entry[16] (#00d02a4e)
    |               |
    |               +---[11]  java.util.HashMap$Entry (#00923db4)
    |                 |
    |                 +---key
org.eclipse.ui.internal.progress.WorkbenchSiteProgressService (#0127e2ee)
    |                   |
    |                   +---site org.eclipse.ui.internal.ViewSite (#01e03412)
    |                     |
    |                     +---pane org.eclipse.ui.internal.ViewPane (#004f439d)
    |                       |
    |                       +---isvMenuMgr
org.eclipse.ui.internal.ViewPane$PaneMenuManager (#01715c02)
    |                         |
    |                         +---contributions java.util.ArrayList (#00cfb92c)
    |                           |
    |                           +---elementData java.lang.Object[10] (#003e97ca)
    |                             |
    |                             +---[0] 
org.eclipse.jface.action.ActionContributionItem (#0197cf84)
    |                               |
    |                               +---action
org.eclipse.team.internal.ui.synchronize.actions.RemoveSynchronizeParticipantAction
(#00a9c0dd)
    |                                 |
    |                                 +---view
org.eclipse.team.internal.ui.synchronize.SynchronizeView (#015b011c)
    |
    +---singleton org.eclipse.ui.internal.progress.ProgressManager (#0020cf5e)
      |
      +---familyListeners java.util.Collections$SynchronizedMap (#0020eaf2)
        |
        +---m java.util.HashMap (#00330ca6)
          |
          +---table java.util.HashMap$Entry[16] (#006ccb80)
            |
            +---[2]  java.util.HashMap$Entry (#0193047b)
              |
              +---value java.util.HashSet (#01feff10)
                |
                +---map java.util.HashMap (#006ed953)
                  |
                  +---table java.util.HashMap$Entry[16] (#00d02a4e)
                    |
                    +---[11]  java.util.HashMap$Entry (#00923db4)
                      |
                      +---key
org.eclipse.ui.internal.progress.WorkbenchSiteProgressService (#0127e2ee)
                        |
                        +---site org.eclipse.ui.internal.ViewSite (#01e03412)
                          |
                          +---pane org.eclipse.ui.internal.ViewPane (#004f439d)
                            |
                            +---isvMenuMgr
org.eclipse.ui.internal.ViewPane$PaneMenuManager (#01715c02)
                              |
                              +---contributions java.util.ArrayList (#00cfb92c)
                                |
                                +---elementData java.lang.Object[10] (#003e97ca)
                                  |
                                  +---[1] 
org.eclipse.jface.action.ActionContributionItem (#01b8fe99)
                                    |
                                    +---action
org.eclipse.team.internal.ui.synchronize.actions.RemoveSynchronizeParticipantAction
(#00b4fce5)
                                      |
                                      +---view
org.eclipse.team.internal.ui.synchronize.SynchronizeView (#015b011c)

Comment 2 Tod Creasey CLA 2004-05-26 16:40:47 EDT
Fixed in HEAD. Will be in the 20040528 build.
Comment 3 Darin Swanson CLA 2004-05-26 19:21:33 EDT
Could this please make it into one of the builds for tomorrow?
Comment 4 Tod Creasey CLA 2004-05-31 11:53:55 EDT
Verified in 20040529