[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[List Home]
|
[imp-commit] r22916 - trunk/org.eclipse.imp.pdb/src/org/eclipse/imp/pdb/indexing
|
- From: genie@xxxxxxxxxxx
- Date: Thu, 31 Mar 2011 15:05:40 -0400 (EDT)
- Delivered-to: imp-commit@eclipse.org
Author: rfuhrer
Date: 2011-03-31 15:05:40 -0400 (Thu, 31 Mar 2011)
New Revision: 22916
Modified:
trunk/org.eclipse.imp.pdb/src/org/eclipse/imp/pdb/indexing/Indexer.java
Log:
The "working copy set" is now copied before handing it to a fact generator, to make sure that no concurrent mod exceptions arise when the client is still processing a previous change when a new change arrives and the Indexer needs to update the working copy set.
Modified: trunk/org.eclipse.imp.pdb/src/org/eclipse/imp/pdb/indexing/Indexer.java
===================================================================
--- trunk/org.eclipse.imp.pdb/src/org/eclipse/imp/pdb/indexing/Indexer.java 2011-03-25 14:26:16 UTC (rev 22915)
+++ trunk/org.eclipse.imp.pdb/src/org/eclipse/imp/pdb/indexing/Indexer.java 2011-03-31 19:05:40 UTC (rev 22916)
@@ -632,8 +632,13 @@
IResource res= workItem.fResource;
IFactKey key= indexer.fKey;
IFactGenerator generator= indexer.fGenerator;
- Map<IResource, IndexedDocumentDescriptor> workingCopySet= Collections.unmodifiableMap(fDocumentMap);
+ Map<IResource, IndexedDocumentDescriptor> workingCopySet= new HashMap<IResource, IndexedDocumentDescriptor>();
+ // Make a copy of the document/resource map to avoid concurrent mod exceptions
+ // if another document/resource change comes along while some client is still
+ // processing previous changes.
+ workingCopySet.putAll(fDocumentMap);
+
// BUG If a generator is registered to produce two fact types, it will
// get invoked once for each type, even if it computes both in one pass.
if (workItem.fDocument != null) {