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 210971 Details for
Bug 368152
ConcurrentModificationException on startup in ExternalFoldersManager.createPendingFolders
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]
new fix
bug368152.patch (text/plain), 4.62 KB, created by
Jay Arthanareeswaran
on 2012-02-14 07:47:35 EST
(
hide
)
Description:
new fix
Filename:
MIME Type:
Creator:
Jay Arthanareeswaran
Created:
2012-02-14 07:47:35 EST
Size:
4.62 KB
patch
obsolete
>diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java >index 91c7643..8b2e896 100644 >--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java >+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java >@@ -101,7 +101,6 @@ > import java.util.HashMap; > import java.util.HashSet; > import java.util.Hashtable; >-import java.util.Iterator; > import java.util.Map; > > import org.eclipse.core.runtime.CoreException; >@@ -117,7 +116,6 @@ > import org.eclipse.core.runtime.QualifiedName; > import org.eclipse.core.runtime.SubProgressMonitor; > import org.eclipse.core.runtime.jobs.ISchedulingRule; >-import org.eclipse.core.runtime.jobs.Job; > > import org.eclipse.core.resources.IContainer; > import org.eclipse.core.resources.IFile; >@@ -3890,7 +3888,6 @@ > monitor.subTask(Messages.javamodel_resetting_source_attachment_properties); > final IJavaProject[] projects = manager.getJavaModel().getJavaProjects(); > HashSet visitedPaths = new HashSet(); >- HashSet externalPaths = new HashSet(); > ExternalFoldersManager externalFoldersManager = JavaModelManager.getExternalManager(); > for (int i = 0, length = projects.length; i < length; i++) { > JavaProject javaProject = (JavaProject) projects[i]; >@@ -3914,32 +3911,19 @@ > if (entry.getEntryKind() == IClasspathEntry.CPE_LIBRARY) { > IPath entryPath = entry.getPath(); > if (ExternalFoldersManager.isExternalFolderPath(entryPath) && externalFoldersManager.getFolder(entryPath) == null) { >- externalPaths.add(entryPath); >+ externalFoldersManager.addFolder(entryPath, true); > } > } > } > } > } >- >- ISchedulingRule rule = null; > try { >- // Use a schedule rule to avoid a race condition (https://bugs.eclipse.org/bugs/show_bug.cgi?id=369251) >- rule = ResourcesPlugin.getWorkspace().getRuleFactory().modifyRule(externalFoldersManager.getExternalFoldersProject()); >- Job.getJobManager().beginRule(rule, monitor); >- >- Iterator externalPathIter = externalPaths.iterator(); >- while (externalPathIter.hasNext()) { >- externalFoldersManager.addFolder((IPath) externalPathIter.next(), true); >- } > externalFoldersManager.createPendingFolders(monitor); >- >- } catch (JavaModelException jme) { >+ } >+ catch(JavaModelException jme) { > // Creation of external folder project failed. Log it and continue; > Util.log(jme, "Error while processing external folders"); //$NON-NLS-1$ >- } finally { >- Job.getJobManager().endRule(rule); > } >- > // initialize delta state > if (monitor != null) > monitor.subTask(Messages.javamodel_initializing_delta_state); >diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java >index d615698..cc37b5b 100644 >--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java >+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java >@@ -122,7 +122,7 @@ > } while (result.exists()); > if (scheduleForCreation) { > if (this.pendingFolders == null) >- this.pendingFolders = new HashSet(); >+ this.pendingFolders = Collections.synchronizedSet(new HashSet()); > this.pendingFolders.add(externalFolderPath); > } > knownFolders.put(externalFolderPath, result); >@@ -166,16 +166,22 @@ > catch(CoreException e) { > throw new JavaModelException(e); > } >- Iterator iterator = this.pendingFolders.iterator(); >- while (iterator.hasNext()) { >- Object folderPath = iterator.next(); >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=368152 >+ // To avoid race condition (from addFolder and removeFolder, load the map elements into an array and clear the map immediately. >+ // The createLinkFolder being in the synchronized block can cause a deadlock and hence keep it out of the synchronized block. >+ Object[] arrayOfFolders = null; >+ synchronized (this.pendingFolders) { >+ arrayOfFolders = this.pendingFolders.toArray(); >+ this.pendingFolders.clear(); >+ } >+ >+ for (int i=0; i < arrayOfFolders.length; i++) { > try { >- createLinkFolder((IPath) folderPath, false, externalFoldersProject, monitor); >+ createLinkFolder((IPath) arrayOfFolders[i], false, externalFoldersProject, monitor); > } catch (CoreException e) { >- Util.log(e, "Error while creating a link for external folder :" + folderPath); //$NON-NLS-1$ >+ Util.log(e, "Error while creating a link for external folder :" + arrayOfFolders[i]); //$NON-NLS-1$ > } > } >- this.pendingFolders.clear(); > } > > public void cleanUp(IProgressMonitor monitor) throws CoreException {
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:
jarthana
:
review?
Actions:
View
|
Diff
Attachments on
bug 368152
:
209211
|
209869
|
209871
| 210971