Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 156501 Details for
Bug 283586
Traditional Rendering are not disposed after Memory Browser is closed or Debug Session is terminated.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Fix to work for both CDT and DSF
MemoryBrowserLeak2.txt (text/plain), 7.31 KB, created by
Teodor Madan
on 2010-01-19 08:58:58 EST
(
hide
)
Description:
Fix to work for both CDT and DSF
Filename:
MIME Type:
Creator:
Teodor Madan
Created:
2010-01-19 08:58:58 EST
Size:
7.31 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.cdt.debug.ui.memory.memorybrowser >Index: src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.cdt/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java,v >retrieving revision 1.12 >diff -u -r1.12 MemoryBrowser.java >--- src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java 18 Dec 2009 20:59:02 -0000 1.12 >+++ src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java 19 Jan 2010 13:41:44 -0000 >@@ -24,17 +24,17 @@ > import org.eclipse.core.runtime.IStatus; > import org.eclipse.core.runtime.SafeRunner; > import org.eclipse.core.runtime.Status; >+import org.eclipse.debug.core.DebugEvent; > import org.eclipse.debug.core.DebugException; > import org.eclipse.debug.core.DebugPlugin; >+import org.eclipse.debug.core.IDebugEventSetListener; > import org.eclipse.debug.core.ILaunch; >-import org.eclipse.debug.core.ILaunchListener; > import org.eclipse.debug.core.model.IDebugTarget; > import org.eclipse.debug.core.model.IMemoryBlock; > import org.eclipse.debug.core.model.IMemoryBlockExtension; > import org.eclipse.debug.core.model.IMemoryBlockRetrieval; > import org.eclipse.debug.core.model.IMemoryBlockRetrievalExtension; > import org.eclipse.debug.core.model.MemoryByte; >-import org.eclipse.debug.internal.ui.DebugUIMessages; > import org.eclipse.debug.internal.ui.memory.MemoryRenderingManager; > import org.eclipse.debug.internal.ui.views.memory.MemoryViewUtil; > import org.eclipse.debug.ui.DebugUITools; >@@ -82,7 +82,6 @@ > import org.eclipse.swt.layout.FormLayout; > import org.eclipse.swt.widgets.Composite; > import org.eclipse.swt.widgets.Control; >-import org.eclipse.swt.widgets.Display; > import org.eclipse.swt.widgets.Label; > import org.eclipse.swt.widgets.Menu; > import org.eclipse.ui.IActionBars; >@@ -91,6 +90,7 @@ > import org.eclipse.ui.IWorkbenchPreferenceConstants; > import org.eclipse.ui.PlatformUI; > import org.eclipse.ui.part.ViewPart; >+import org.eclipse.ui.progress.UIJob; > import org.eclipse.ui.progress.WorkbenchJob; > > /** >@@ -106,7 +106,7 @@ > */ > > @SuppressWarnings("restriction") >-public class MemoryBrowser extends ViewPart implements IDebugContextListener, ILaunchListener, IMemoryRenderingSite >+public class MemoryBrowser extends ViewPart implements IDebugContextListener, IMemoryRenderingSite, IDebugEventSetListener > { > public static final String ID = "org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser"; //$NON-NLS-1$ > >@@ -226,7 +226,7 @@ > selection = contextService.getActiveContext(); > } > >- DebugPlugin.getDefault().getLaunchManager().addLaunchListener(this); >+ DebugPlugin.getDefault().addDebugEventListener(this); > > if(selection instanceof StructuredSelection) > handleDebugContextChanged(((StructuredSelection) selection).getFirstElement()); >@@ -257,7 +257,7 @@ > } > > public void dispose() { >- DebugPlugin.getDefault().getLaunchManager().removeLaunchListener(this); >+ DebugPlugin.getDefault().removeDebugEventListener(this); > IDebugContextService contextService = > DebugUITools.getDebugContextManager().getContextService(getSite().getWorkbenchWindow()); > if (isBug145635Patched()) { >@@ -269,18 +269,18 @@ > super.dispose(); > } > >- public void launchAdded(ILaunch launch) {} >- public void launchChanged(ILaunch launch) {} >- >- public void launchRemoved(ILaunch launch) { >- // For CDT launch is not adaptable to memory rendering, but the debug targets do. >- for (IDebugTarget target : launch.getDebugTargets()) { >- IMemoryBlockRetrieval retrieval = ((IMemoryBlockRetrieval) target.getAdapter(IMemoryBlockRetrieval.class)); >- if(retrieval != null) >- releaseTabFolder(retrieval); >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent[]) >+ */ >+ public void handleDebugEvents(DebugEvent[] events) { >+ for (DebugEvent event: events) { >+ Object source = event.getSource(); >+ if (event.getKind() == DebugEvent.TERMINATE && source instanceof IMemoryBlockRetrieval) { >+ releaseTabFolder(source); >+ } > } > } >- >+ > public IMemoryRenderingContainer getContainer(String id) { > return null; > } >@@ -334,7 +334,7 @@ > if(((IMemoryBlockExtension) rendering.getMemoryBlock()).supportBaseAddressModification()) > ((IMemoryBlockExtension) rendering.getMemoryBlock()).setBaseAddress(newBase); > rendering.goToAddress(newBase); >- Display.getDefault().asyncExec(new Runnable(){ >+ runOnUIThread(new Runnable(){ > public void run() > { > updateLabel(activeFolder.getSelection(), rendering); >@@ -422,7 +422,8 @@ > } > IMemoryBlockExtension block = (IMemoryBlockExtension) item.getData(KEY_MEMORY_BLOCK); > try { >- block.dispose(); >+ if (block != null) >+ block.dispose(); > } catch (DebugException e) { > MemoryBrowserPlugin.getDefault().getLog().log(new Status(Status.ERROR, MemoryBrowserPlugin.PLUGIN_ID, "Could not dispose memory block", e)); //$NON-NLS-1$ > } >@@ -536,9 +537,11 @@ > > if(context instanceof IAdaptable) > { >- IMemoryBlockRetrieval retrieval = ((IMemoryBlockRetrieval) ((IAdaptable) context).getAdapter(IMemoryBlockRetrieval.class)); >+ IAdaptable adaptable_context = (IAdaptable) context; >+ IMemoryBlockRetrieval retrieval = ((IMemoryBlockRetrieval) adaptable_context.getAdapter(IMemoryBlockRetrieval.class)); >+ ILaunch launch = ((ILaunch) adaptable_context.getAdapter(ILaunch.class)); > >- if(retrieval != null) >+ if(retrieval != null && launch != null && !launch.isTerminated()) > { > fGotoAddressBarControl.setVisible(true); > CTabFolder tabFolder = getTabFolder(retrieval); >@@ -666,20 +669,25 @@ > return fContextFolders.put(context, folder); > } > >- private void releaseTabFolder(Object context) >+ private void releaseTabFolder(final Object context) > { > final CTabFolder folder = getTabFolder(context); > if(folder != null) > { >- for(CTabItem tab : folder.getItems()) { >- disposeTab(tab); >- } >- } >- fContextFolders.remove(context); >- folder.dispose(); >- >- if (fStackLayout.topControl.equals(folder)) { >- handleUnsupportedSelection(); >+ Runnable run = new Runnable() { >+ public void run() { >+ for(CTabItem tab : folder.getItems()) { >+ disposeTab(tab); >+ } >+ fContextFolders.remove(context); >+ folder.dispose(); >+ >+ if (fStackLayout.topControl.equals(folder)) { >+ handleUnsupportedSelection(); >+ } >+ } >+ }; >+ runOnUIThread(run); > } > } > >@@ -757,6 +765,26 @@ > newBlock.dispose(); > return address; > } >+ >+ /** >+ * execute runnable on UI thread if the current thread is not an UI thread >+ * @param runnable >+ */ >+ private void runOnUIThread(final Runnable runnable) >+ { >+ if (MemoryBrowserPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow() != null) { >+ runnable.run(); >+ } >+ else { >+ UIJob job = new UIJob("Memory Browser UI Job"){ //$NON-NLS-1$ >+ public IStatus runInUIThread(IProgressMonitor monitor) { >+ runnable.run(); >+ return Status.OK_STATUS; >+ }}; >+ job.setSystem(true); >+ job.schedule(); >+ } >+ } > } > >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
cdtdoug
:
iplog+
Actions:
View
|
Diff
Attachments on
bug 283586
:
149346
| 156501 |
156503
|
156707
|
156851