### Eclipse Workspace Patch 1.0 #P org.eclipse.core.resources Index: src/org/eclipse/core/internal/localstore/UnifiedTreeNode.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/UnifiedTreeNode.java,v retrieving revision 1.23 diff -u -r1.23 UnifiedTreeNode.java --- src/org/eclipse/core/internal/localstore/UnifiedTreeNode.java 18 Mar 2009 11:02:11 -0000 1.23 +++ src/org/eclipse/core/internal/localstore/UnifiedTreeNode.java 14 Oct 2009 14:39:28 -0000 @@ -7,6 +7,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Martin Oberhuber (Wind River) - [292267] OutOfMemoryError due to leak in UnifiedTree *******************************************************************************/ package org.eclipse.core.internal.localstore; @@ -108,6 +109,17 @@ this.fileInfo = info; this.existsWorkspace = existsInWorkspace; } + + /** + * Releases elements that won't be needed any more for garbage collection. + * Should be called before adding a node to the free list. + */ + public void releaseForGc() { + this.child = null; + this.resource = null; + this.store = null; + this.fileInfo = null; + } public void setExistsWorkspace(boolean exists) { this.existsWorkspace = exists; Index: src/org/eclipse/core/internal/localstore/UnifiedTree.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/UnifiedTree.java,v retrieving revision 1.47 diff -u -r1.47 UnifiedTree.java --- src/org/eclipse/core/internal/localstore/UnifiedTree.java 18 Mar 2009 11:02:11 -0000 1.47 +++ src/org/eclipse/core/internal/localstore/UnifiedTree.java 14 Oct 2009 14:39:28 -0000 @@ -9,6 +9,7 @@ * IBM Corporation - initial API and implementation * Martin Oberhuber (Wind River) - [105554] handle cyclic symbolic links * Martin Oberhuber (Wind River) - [232426] shared prefix histories for symlinks + * Martin Oberhuber (Wind River) - [292267] OutOfMemoryError due to leak in UnifiedTree *******************************************************************************/ package org.eclipse.core.internal.localstore; @@ -107,8 +108,12 @@ addNodeChildrenToQueue(node); else removeNodeChildrenFromQueue(node); - //allow reuse of the node - freeNodes.add(node); + //allow reuse of the node, but don't let the freeNodes list grow infinitely + if (freeNodes.size() < 32767) { + freeNodes.add(node); + //free memory-consuming elements of the node for garbage collection + node.releaseForGc(); + } } }